AcWing 116. 飞行员兄弟
原题链接
简单
作者:
海里长蘑菇
,
2024-03-24 17:28:42
,
所有人可见
,
阅读 1
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#define x first
#define y second
using namespace std;
const int N = 9;
typedef pair<int, int> PII;
char g[N][N],backup[N][N];
void turn_one(int a,int b)
{
if(g[a][b] == '+') g[a][b] = '_';
else g[a][b] = '+';
}
void turn_all(int a,int b)
{
for(int i = 0 ; i < 4 ; i++)
turn_one(a,i);
for(int i = 0 ; i < 4 ; i++)
turn_one(i,b);
turn_one(a,b);
}
int main()
{
for(int i = 0 ; i<4 ; i++) cin>>g[i]; //两重循环输入也是可以的。
vector<PII> res;
for(int op = 0 ; op < 1<<16; op++)
{
memcpy(backup, g,sizeof g);
vector<PII> fakeres; // vector(PII) 这样调用是不可以的哦
for(int i = 0 ;i < 4 ; i++)
for(int j = 0 ; j < 4 ; j++)
if(op>>(4*i+j)&1) //if(op<<(4*i+j)&1) 左移可是一点用都没有哦
{ turn_all(i,j);
fakeres.push_back({i,j}); //fakeres.push_back({i,j});不放进去可是什么都没有哦
}
bool right = true; // true ture 要分清
for(int i = 0 ; i < 4; i++)
for(int j = 0 ; j < 4 ; j++)
if(g[i][j] == '+') right = false; //g[i][j] == "+" 字符串可不行哦
if(right == true)
{
if(res.empty()||res.size() > fakeres.size()) //res.zize > fakeres.size 语法错误要不得
{
res = fakeres;
}
}
memcpy(g,backup,sizeof backup);
}
cout<<res.size()<<endl;
for(auto lusi:res) cout<<lusi.x+1<<' '<<lusi.y+1<<endl;
}