当时没有做出来,日后想了一会儿也没有好的思路。
看了题解才发现自己压根就没有找到题目的关键所在。
正如上面所说的那样,除了对角线上的元素外,Aij * Aji 都计算了两遍,所以和结果没有关系。
代码如下(优化的不够彻底):
1 #include2 #include 3 4 int n, q; 5 char str[1000005]; 6 7 int main() { 8 while (~scanf("%d", &n) && n) { 9 int sum = 0, count = 0;10 for (int i = 1; i <= n; i++) {11 for (int j = 1; j <= n; j++) {12 int k;13 scanf("%d", &k);14 if (i == j)15 sum ^= k;16 }17 }18 scanf("%d", &q);19 while (q--) {20 int c;21 scanf("%d", &c);22 if (c == 1 || c == 2) {23 int i;24 scanf("%d", &i);25 sum ^= 1;26 }27 else {28 if (sum) 29 str[count++] = '1';30 else31 str[count++] = '0';32 }33 //printf("%d\n", sum);34 }35 str[count] = '\0';36 puts(str);37 }38 39 return 0;40 }