首页 > 其他 > 详细

MZL's xor

时间:2015-10-12 20:50:27      阅读:266      评论:0      收藏:0      [点我收藏+]

MZL‘s xor

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other)
Total Submission(s) : 1   Accepted Submission(s) : 1
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 ($A_i$+$A_j$)($1\leq i,j \leq n$)
The xor of an array B is defined as $B_1$ xor $B_2$...xor $B_n$
 

 

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$ $A_1=0$,$A_i=(A_{i-1}*m+z)$ $mod$ $l$ $1\leq m,z,l \leq 5*10^5$,$n=5*10^5$
 

 

Output
For every test.print the answer.
 

 

Sample Input
2 3 5 5 7 6 8 8 9
 

 

Sample Output
14 16
 题解:就是A数组可以得出,B数组是A[i]+A[j]组成的数组让求B1^B2^.......^Bn的值;
代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 const int MAXN=5*1e5+10;
 4 long long A[MAXN],B[MAXN];
 5 int main(){
 6     int T,n,m,z,l;
 7     scanf("%d",&T);
 8     while(T--){
 9         scanf("%d%d%d%d",&n,&m,&z,&l);
10         A[0]=0;
11         long long ans=0;
12         for(int i=1;i<n;i++){
13             A[i]=(A[i-1]%l*m%l+z%l)%l;
14             B[i]=A[i]+A[i];//因为相同的元素异或结果为0;所以A[i]+A[j] | A[j]+A[i]等于0;只剩相同元素之和的异或; 
15             ans^=B[i];
16         }
17         printf("%lld\n",ans);
18     }
19     return 0;
20 }

 

MZL's xor

原文:http://www.cnblogs.com/handsomecui/p/4872648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!