AcWing 116. 飞行员兄弟
原题链接
简单
作者:
bsyz
,
2024-04-05 16:02:54
,
所有人可见
,
阅读 2
#include<bits/stdc++.h>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 5;
typedef pair<int,int> pii;
char g[N][N],backup[N][N];
int get(int i,int j)
{
int ans;
ans=i*4 +j;
return ans;
}
void turn_one(int x,int y)
{
if(g[x][y]=='+')
g[x][y]='-';
else
g[x][y]='+';
return ;
}
void turn_all(int x,int y)
{
for(int i=0;i<4;++i)
{
turn_one(x,i);
turn_one(i,y);
}
turn_one(x,y);
}
int main(){
for(int i=0;i<4;++i)
{
scanf("%s",g[i]);
}
vector<pii> res;
for(int op=0;op<1<<16;++op)
{
vector<pii> temp;
memcpy(backup,g,sizeof g);
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
{
if(op>>get(i,j)&1)
{
temp.push_back({i,j});
turn_all(i,j);
}
}
bool succ=true;
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
{
if(g[i][j]=='+')
succ = false;
}
if(succ)
{
if(res.empty()||res.size()>temp.size())
res=temp;
}
memcpy(g,backup,sizeof g);
}
printf("%d\n",res.size());
for(auto op:res)
{
printf("%d %d\n",op.first+1,op.second+1);
}
return 0;
}