您的位置:首页 > 其它

HDU5344——数学题——MZL's xor

2015-08-05 22:16 477 查看
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

[align=left]Input[/align]
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

[align=left]Output[/align]
For every test.print the answer.

[align=left]Sample Input[/align]

2
3 5 5 7
6 8 8 9

[align=left]Sample Output[/align]

14
16

[align=left]Source[/align]
2015 Multi-University Training Contest 5

/*
根据式子可以推出公式为所有值×2的异或和
*/
/************************************************
Author        :powatr
Created Time  :2015-8-5 22:08:30
File Name     :b.cpp
************************************************/

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;

#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAX = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;

ll a[MAX];
int main(){
int n, m, z, l;
int T;
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] = (a[i-1]*m + z)%l;
ll sum = 0;
for(int i = 1; i <= n; i++)
sum ^= 1ll*(a[i] << 1);
printf("%I64d\n", sum);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: