Bestcoders 56 Clarke and puzzle
2015-09-20 20:13
197 查看
Clarke and puzzle
Accepts: 129Submissions: 322
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description
Clarke is a patient with multiple personality disorder. One day, Clarke split into two personality aa and bb,
they are playing a game.
There is a n*mn∗m matrix,
each grid of this matrix has a number c_{i,
j}ci,j.
aa wants
to beat bb every
time, so aa ask
you for a help.
There are qq operations,
each of them is belonging to one of the following two types:
They play the game on a (x_1,
y_1)-(x_2, y_2)(x1,y1)−(x2,y2) sub
matrix. They take turns operating. On any turn, the player can choose a grid which has a positive integer from the sub matrix and decrease it by a positive integer which less than or equal this grid's number. The player who can't operate is loser. aa always
operate first, he wants to know if he can win this game.
Change c_{i,
j}ci,j to bb.
Input
The first line contains a integer T(1
\le T \le 5)T(1≤T≤5),
the number of test cases.
For each test case:
The first line contains three integers n,
m, q(1 \le n, m \le 500, 1 \le q \le 2*10^5)n,m,q(1≤n,m≤500,1≤q≤2∗105)
Then n*mn∗m matrix
follow, the ii row jj column
is a integer c_{i,
j}(0 \le c_{i, j} \le 10^9)ci,j(0≤ci,j≤109)
Then qq lines
follow, the first number is optopt.
if opt=1opt=1,
then 44 integers x_1,
y_1, x_1, y_2(1 \le x_1 \le x_2 \le n, 1 \le y_1 \le y_2 \le m)x1,y1,x1,y2(1≤x1≤x2≤n,1≤y1≤y2≤m) follow,
represent operation 11.
if opt=2opt=2,
then 33 integers i,
j, bi,j,b follow,
represent operation 22.
Output
For each testcase, for each operation 11,
print YesYes if aa can
win this game, otherwise print NoNo.
Sample Input
1 1 2 3 1 2 1 1 1 1 2 2 1 2 1 1 1 1 1 2
Sample Output
Yes No Hint: The first enquiry: aa can decrease grid (1, 2)(1,2)'s number by 11. No matter what bb operate next, there is always one grid with number 11 remaining . So, aa wins. The second enquiry: No matter what aa operate, there is always one grid with number 11 remaining. So, bb wins.
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 500 + 5 int n, m, q; int c ; int sum ; inline int lowbit(int x) { return x & (-x); } void update(int x, int y, int data) { for(int i = x; i <= n; i += lowbit(i)) for(int j = y; j <= m; j += lowbit(j)) sum[i][j] ^= data; } int get_sum(int x, int y) { int res = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) res ^= sum[i][j]; return res; } int main() { int T; scanf("%d", &T); while(T--) { memset(sum, 0, sizeof sum); scanf("%d%d%d", &n, &m, &q); for(int i = 1; i <= n ; i++) for(int j = 1; j <= m; j++) { scanf("%d", &c[i][j]); update(i, j, c[i][j]); } int x1, x2, y1, y2, op; while(q--) { scanf("%d", &op); if(op == 1) { scanf("%d%d%d%d", &x1, &y1, &x2, &y2); int ans = 0; ans = get_sum(x2, y2) ^ get_sum(x1 - 1, y1 - 1) ^ get_sum(x2, y1 - 1) ^ get_sum(x1 - 1, y2); (ans == 0) ? printf("No\n") : printf("Yes\n"); } else { scanf("%d%d%d", &x1, &y1, &x2); update(x1, y1, c[x1][y1] ^ x2); c[x1][y1] = x2; } } } return 0; } /* 1 3 3 10 1 1 1 1 1 1 1 1 1 */
相关文章推荐
- 转 Java final、static使用总结
- 技术人生:故事之三十七 码农也是人!
- 技术人生:故事之三十八 孤独的殉道者
- PHP+Nginx环境搭配
- MyBatis之Mapper动态代理
- 大数据量时Mysql的优化要点【转】
- MyBatis笔记——Mapper动态代理
- 堆与堆排序
- poj 1782 Run Length Encoding 自动机处理字符串
- 九大内置对象及四大作用域
- 信息安全系统设计基础第一周学习总结
- Java中重载和重写的区别
- NYOJ 76 超级台阶 (斐波那契)
- hdu 5464 Clarke and problem (BestCoder Round #56 (div.2))
- 技术人生:故事之三十六 放弃骑士时代
- [LeetCode] Move Zeroes - 整数数组处理问题
- MapReduce的InputFormat学习过程
- usaco Magic Squares
- HTTP劫持后续查查xjcf168.com
- 转 Java this、super使用总结