题目详情
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7f6aff8f2589c73e924a30a01aea87fe.png)
解题代码
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
typedef pair<int,int> PII;
char g[10][10],backup[10][10];
int get(int i,int j)
{
return i*4+j;
}
void turn_one(int x,int y)
{
if(g[x][y]=='+') g[x][y]='-';
else g[x][y]='+';
}
void turn_all(int x,int y)
{
for(int i=0;i<4;i++) turn_one(x,i);
for(int i=0;i<4;i++) turn_one(i,y);
turn_one(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> tmp;
memcpy(backup,g,sizeof g);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
if(op & (1<<get(i,j)))
{
tmp.push_back({i,j});
turn_all(i,j);
}
}
bool close=false;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(g[i][j]=='+') close=true;
if(!close)
{
if(res.empty() || res.size()<tmp.size()) res=tmp;
}
memcpy(g,backup,sizeof g);
}
cout << res.size() << endl;
for(int i=0;i<res.size();i++)
{
cout << res[i].first +1<< " " << res[i].second+1<<endl;
}
return 0;
}