当时没有做出来,日后想了一会儿也没有好的思路。
看了题解才发现自己压根就没有找到题目的关键所在。
正如上面所说的那样,除了对角线上的元素外,Aij * Aji 都计算了两遍,所以和结果没有关系。
#include <cstdio>
#include <cstring>
int n, q;
char str[1000005];
int main() {
while (~scanf("%d", &n) && n) {
int sum = 0, count = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
int k;
scanf("%d", &k);
if (i == j)
sum ^= k;
}
}
scanf("%d", &q);
while (q--) {
int c;
scanf("%d", &c);
if (c == 1 || c == 2) {
int i;
scanf("%d", &i);
sum ^= 1;
}
else {
if (sum)
str[count++] = '1';
else
str[count++] = '0';
}
//printf("%d\n", sum);
}
str[count] = '\0';
puts(str);
}
return 0;
}
代码如下(优化的不够彻底):