C. Unusual Product(cf)

http://codeforces.com/problemset/problem/405/C

题意:

给出一个n*n的矩阵,有q个操作,输入3时,输出A ,A等于第i行乘以第i列的对应元素的和(mod2),输入1 x,表示将第x行的元素翻转(即0变成1,1变成0),输入2 x,表示将第x列的元素翻转.

思路:

根据A的计算方式可知A的最终结果只由左对角线上的元素将决定,如果左对角线上的元素为1的个数有奇数个(可通过异或计算),则A=1,否则A=0。翻转的时候每翻转一行或一列,都会改变对角线的元素,故结果应异或上1.

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int N=1002;
 4 int a[N][N];
 5 
 6 int main()
 7 {
 8     int n;
 9     scanf("%d",&n);
10     int A = 0;
11     for (int i = 1; i <= n; i++)
12     {
13         for (int j = 1; j <= n; j++)
14         {
15             scanf("%d",&a[i][j]);
16             if (i==j) A^=a[i][j];
17         }
18     }
19     int q,x;
20     scanf("%d",&q);
21     while(q--)
22     {
23         scanf("%d",&x);
24         if (x==3)
25             printf("%d",A);
26         else
27         {
28             scanf("%d",&x);
29             A^=1;
30         }
31     }
32     return 0;
33 }
View Code
原文地址:https://www.cnblogs.com/lahblogs/p/3621008.html