AcWing 116. 飞行员兄弟
原题链接
简单
作者:
好烂人
,
2025-03-21 23:13:18
· 江苏
,
所有人可见
,
阅读 1
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define x first
#define y second
const int N = 5;
char g[N][N];
char backup[N][N];
typedef pair<int,int> PII;
int getWZ(int x, int y)
{
return x * 4 + y;
}
void turn(int x, int y)
{
for(int j = 0; j < 4; j ++)
{
if(g[x][j] == '+') g[x][j] = '-';
else g[x][j] = '+';
}
for(int i = 0; i < 4; i ++)
{
if(g[i][y] == '+') g[i][y] = '-';
else g[i][y] = '+';
}
if(g[x][y] == '+') g[x][y] = '-';
else g[x][y] = '+';
}
int main()
{
for(int i = 0;i < 4; i ++)
cin>>g[i];
vector<PII> res;
for(int op = 0; op < 1 << 16; op ++)
{
vector<PII> st;
memcpy(backup, g, sizeof g);
for(int i = 0; i < 4; i ++)
{
for(int j = 0; j < 4; j ++)
{
int wz = getWZ(i, j);
if(op >> wz & 1)
{
st.push_back({i, j});
turn(i, j);
}
}
}
bool is_sucess = true;
for(int i = 0; i < 4; i ++)
{
for(int j = 0; j < 4; j ++)
{
if(g[i][j] == '+') is_sucess = false;
}
}
if(is_sucess)
{
if(res.empty() || st.size() < res.size())
res = st;
}
memcpy(g, backup, sizeof backup);
}
cout<<res.size()<<endl;
for(auto op:res) cout<<op.x+1<<" "<<op.y+1<<endl;
return 0;
}