cf-Global Round2-C. Ramesses and Corner Inversion(思维)

题目链接:http://codeforces.com/contest/1119/problem/C

题意:给两个同型的由0、1组成的矩阵A、B,问A能否经过指定的操作变成B,指定操作为在矩阵A中选定一个子矩阵(行数,列数均>=2),该子矩阵的四个角的值能翻转,即1->0,0->1。

思路:结论--只要A、B的所有行的值之和同奇偶,所有列的值之和同奇偶就输出Yes,否则输出No。证明:经过操作(1,1,x,y) (x>1,y>1)可将A中非第一行、第一列的元素变成和B一致,即Axy=Bxy。然后因为变化的过程每一行、每一列的奇偶不变,所以此时A、B的第一行、第一列的值自然也相等。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,m,rs[2][505],cs[2][505],tmp;
 5 
 6 int main(){
 7     scanf("%d%d",&n,&m);
 8     for(int i=0;i<2;++i)
 9         for(int j=0;j<n;++j)
10             for(int k=0;k<m;++k){
11                 scanf("%d",&tmp);
12                 rs[i][j]^=tmp;
13                 cs[i][k]^=tmp;
14             }
15     int flag=1;
16     for(int i=0;i<n;++i)
17         if(rs[0][i]!=rs[1][i]){
18             flag=0;
19             break;
20         }
21     if(flag){
22         for(int i=0;i<m;++i)
23             if(cs[0][i]!=cs[1][i]){
24                 flag=0;
25                 break;
26             }
27     }
28     if(flag) printf("Yes\n");
29     else printf("No\n");
30     return 0;
31 }

 

posted @ 2019-04-08 19:38  Frank__Chen  阅读(183)  评论(0编辑  收藏  举报