题意:给你n*n的矩阵,里面是1或0,然后q次询问,如果操作数为1,那么就把x行的数0变成1,1变成0;如果操作数为2,那么在x列上的数0变成1,1变成0;如果是3,输出;
思路:在求的时候,对角线上的数是自己乘自己,其他位置上的数都是相乘两次,最后其他位置上的数求得值都为0,当改变每一行或者每一列其它位置上不用管,只是对角线上的有个数改变了,那么最后的值异或1就可以。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int c[1010][1010]; 7 int n,q; 8 int ans[10000010]; 9 10 11 int main() 12 { 13 int x; 14 scanf("%d",&n); 15 int ans1=0; 16 for(int i=1; i<=n; i++) 17 { 18 for(int j=1; j<=n; j++) 19 { 20 scanf("%d",&x); 21 if(i==j) ans1^=x; 22 } 23 } 24 int cnt=0; 25 scanf("%d",&q); 26 for(int i=1; i<=q; i++) 27 { 28 int op; 29 scanf("%d",&op); 30 if(op==3) 31 { 32 ans[cnt++]=ans1; 33 } 34 else 35 { 36 scanf("%d",&x); 37 ans1^=1; 38 } 39 } 40 for(int i=0; i<cnt; i++) 41 { 42 printf("%d",ans[i]); 43 } 44 printf("\n"); 45 return 0; 46 }
时间: 2024-10-21 12:11:01