hdoj 5433 MZL's xor ( 异或性质)

来源:互联网 发布:网络弊大于利反方提问 编辑:程序博客网 时间:2024/06/05 14:19

MZL's xor

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1215    Accepted Submission(s): 745


Problem Description
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)(1i,jn)
The xor of an array B is defined as B1 xor B2...xorBn
 

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=(Ai1m+z)modl
1m,z,l5105,n=5105
 

Output
For every test.print the answer.
 

Sample Input
23 5 5 76 8 8 9
 

Sample Output
1416
 
异或性质:a^a=0   ,  a^0=a  .
题解:发现求 (A1+A1)^(A1+A2)^.......(A2+A1)^(A2+A2).......(An+An),最后(Ai+Aj)^(Aj+Ai)=0,    sum=0^(2*A1)......^(2*An);
异或 ^ 是运算符。

代码:

#include<cstdio>int a[1000000];int main(){int t,n,m,z,l;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&n,&m,&z,&l);a[1]=0;for(int i=2;i<=n;i++){a[i]=((long long)a[i-1]*m+z)%l;//用long long }int sum=0;for(int i=1;i<=n;i++){sum=sum^(2*a[i]);}printf("%d\n",sum);}return 0;}


0 0