地址:http://codeforces.com/contest/405/problem/C
题意:模拟矩阵相乘,然后按照操作求出 the unusual square,操作1是改变第i行,操作2是改变第j行,操作3是输出此时的the unusual square值。改变的意思就是对1取反,即0变1,1变0。
思路:因为the unusual square的结果是模2的,所以,计算矩阵的时候,出现两次的肯定为0,所以,最后的结果只有是i==j的时候的值,ans=a[1][1]+a[2][2]+......,对于每次的操作一和操作二,改变的结果也就是把值变换一次,即对一取反,故本题只要统计操作一和操作二的次数即可。
代码如下:
#include <stdio.h> #include <stdlib.h> int main() { int i,n,j,q; scanf("%d",&n); int ans=0; for (i=0;i<n;i++) { for (j=0;j<n;j++) { int x; scanf("%d",&x); if (i==j) ans^=x; } } scanf("%d",&q); for (i=0;i<q;i++) { int m,x; scanf("%d",&m); if (m!=3) { ans^=1; scanf("%d",&x); } else printf("%d",ans); } printf("\n"); return 0; }