您的位置:首页 > 其它

杭电OJ异或题

2015-09-20 23:35 387 查看



改题限制了l和n的大小,实际上l和n可以取无限大,很多人可能会想着开一个500000以上的数组,其实两个变量就解决问题了,时间复杂度是O(n),空间复杂度是O(1);

AC代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
long long A;
int n, m, z, l;
int t,i,j,r=0;
long long sum = 0;
scanf_s("%d", &t);
for (i = 0; i < t; i++)
{
scanf_s("%d %d %d %d", &n, &m, &z, &l);
A = 0;
sum = 0;
for (j = 0; j < n; j++)
{
sum = sum^A;
A = (A * m + z) % l;
}
printf("%I64d\n", sum*2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  异或 ACM 杭州OJ