hdu 5334 MZL's xor

简介:

hdu 5334 的传送门

MZL loves xor very much.Now he gets an array A.The length of A is n.He wants to know the xor of all (Ai+Aj)(1≤i,j≤n)
The xor of an array B is defined as B1 xor B2…xor Bn

Input
Multiple test cases, the first line contains an integer T(no more than 20), indicating the number of cases.
Each test case contains four integers:n,m,z,l
A1=0,Ai=(Ai−1∗m+z) mod l
1≤m,z,l≤5∗105,n=5∗105

Output
For every test.print the answer.

Sample Input
2
3 5 5 7
6 8 8 9

Sample Output
14
16

题目大意: 就是给你一个t表示有t组数据,然后有四个数,n表示最多有几个,也就是i的上限,其余的都在公式里,然后让你求所有和的异或(a[i] 和 a[j]);
解题思路:其实和的异或只有i == j 的时候异或可以,别的都相等,比如说,
当n==3 的时候,有{a[1]+a[2], a[1]+a[3], a[2]+a[3], a[2]+a[1]}——(1);
{ a[3]+a[1], a[3]+a[2]}————(2);
(a[1]+a[1], a[2]+a[2], a[3]+a[3])———(3);
(1) 和 (2) 的异或值是0,所以就只剩下(3)了,明白这一点就好做了,,
下面上代码:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
int main()
{
    int n,m,z,l,t;
    cin>>t;
    while(t--)
    {
        scanf("%d%d%d%d",&n, &m, &z, &l);
        int ans=0;
        int a=0;
        for(int i=0; i<n; i++)
        {
            a=a^(ans*2);//也就是a^=(ans+ans)
            ans=((LL)ans*m+z)%l;
        }
        cout<<a<<endl;
    }
    return 0;
}
目录
相关文章
|
6月前
|
算法 C语言 C++
每日一题:NowCower-JZ64.求1+2+3+...+n
每日一题:NowCower-JZ64.求1+2+3+...+n
|
6月前
PTA-求100以内的素数
求100以内的素数
57 0
|
6月前
PTA-求指定范围内的素数
求指定范围内的素数
79 0
|
12月前
hdu 1196 Lowest Bit(水题)
hdu 1196 Lowest Bit(水题)
38 0
|
存储
[MRCTF2020]Xor 题解
[MRCTF2020]Xor 题解
89 0
|
12月前
|
Java
hdu 1262 寻找素数对
hdu 1262 寻找素数对
34 0
|
机器学习/深度学习 算法 C++
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
剑指offer(C++)-JZ64:求1+2+3+...+n(算法-位运算)
|
C++ iOS开发 MacOS
xor题解
xor题解
87 0
xor题解
[Codeforces] 1557 C Moamen and XOR(组合数学)
题意: 用 < 2k的数填充到长度为n的数组中,要使得数组中所有数& >= ^,问方案数 显然,当k == 1的时候,答案为1,只有当所有的数全为1的情况才可以满足题意 对于其他的情况{ 用小于2k的数进行填充,那么说明填充的数字的二进制位数最多可以有k kk位, 从数的个数的角度来说,奇数个1^ 之后的结果是1,偶数个1^ 之后的结果是0,而对于0来讲,不管多少个0,^起来结果都是0 只要有一个0,那么说这一位上&之后就是0,而为了让^为0,那么只能够选择偶数个1 如果某一位上&为1,那么^为1的情况需要讨论n的奇偶性
119 0
HDU-1262,寻找素数对(素数打表)
HDU-1262,寻找素数对(素数打表)