当时没有做出来,日后想了一会儿也没有好的思路。
看了题解才发现自己压根就没有找到题目的关键所在。
正如上面所说的那样,除了对角线上的元素外,Aij * Aji 都计算了两遍,所以和结果没有关系。
代码如下(优化的不够彻底):
1 #include <cstdio> 2 #include <cstring> 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 else 31 str[count++] = '0'; 32 } 33 //printf("%d ", sum); 34 } 35 str[count] = '