题意
给定4*4矩阵,把所有的“+”变为“-”,每次修改一个点,将修改与这个点同一行同一列的所有点。
分析
有结论:修改一个点,则修改与这个点同一行同一列的所有点(包括这个点),而图中其他所有点都不会被修改,为什么呢?
4 4 4 4 ↓ ↓ ↓ ↓ --> 7 0 0 0 0 --> 4 0 0 0 0 --> 4 0 0 0 0 --> 4 0 0 0 0
假设要修改第一行第一列,则按上述方式,周围一圈的点修改的次数就像图上标的。图内其他点都被修改2次
所以只有要修改的那个店是奇数次修改,其他点相当于没有修改
那我们只需要枚举每个“+”,进行结论的修改操作,然后统计哪些点被修改的次数是奇数次(xor n次后答案是1)
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; #define N 110 int cnt; int a[20][20],color[N*N][2]; char s[N]; int main() { for(int i=1;i<=4;i++) { scanf("%s",s+1); for(int j=1;j<=4;j++) { if(s[j]=='+') { a[i][j]^=1; for(int k=1;k<=4;k++) a[i][k]^=1,a[k][j]^=1; } } } for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) if(a[i][j]) cnt++,color[cnt][0]=i,color[cnt][1]=j; printf("%d ",cnt); for(int i=1;i<=cnt;i++) printf("%d %d ",color[i][0],color[i][1]); return 0; }