杭电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; }
相关文章推荐
- JavaScript中按位“异或”运算符使用介绍
- Java中使用异或运算符实现加密字符串
- 简单的四则运算
- 数的奇偶性
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 异或的性质及运用
- 矩阵的乘法操作
- 【位运算】之 异或
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers