很久之前做过的 翻出来回顾一下
这个题意思 就是给一个4*4 矩阵 有 - 和 +
通过反转来实现。反转任何一个点时 都会反转这个点所在的行和列的所有点
这样 我们怎么只让1点反过来呢?
想一下发现 如果把1点的所在行和列所有点都反转 那么最后整个矩阵 只有这个1点变0了 其余不变。
因为任何一个点都有行和列 行在的那个转了一次 列 的那个又转了一次。
最后求余2 就行了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int map[5][5];
char ch[6];
void handle(int ,int );
void solve();
int main()
{
int i,j;
memset(map,0,sizeof(map));
for(i=1;i<=4;++i)
{
scanf("%s",ch);
for(j=1;j<=4;++j)
if(ch[j-1]=='+')
handle(i,j);
};
solve();
return 0;
}
void handle (int a,int b)
{
for(int k=1;k<=4;++k)
{
map[a][k]++;
map[k][b]++;
}
map[a][b]--;
}
void solve()
{
int ans=0;
for(int i=1;i<=4;++i)
for(int j=1;j<=4;++j)
if(map[i][j]%2)
ans++;
printf("%d\n",ans);
for(int i=1;i<=4;++i)
{
for(int j=1;j<=4;++j)
if(map[i][j]%2)
printf("%d %d\n",i,j);
}
}