打卡
没想到居然是暴力求解,我以为这题必有高论,还想了半天
但是数据一共才16个,确实可以暴力
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include <cstring>
#include<string>
#include<queue>
using namespace std;
char origin[4][4]; char f[4][4];
typedef pair<int,int> pa;
vector<pa> ans;
void change(int x,int y)
{
if(f[x][y]=='+')f[x][y]='-';
else f[x][y]='+';
}
void press(int x,int y)
{
change(x,y);
for(int i=0;i<4;i++)
{change(x,i); change(i,y);}
}
int main()
{
for(int i=0;i<4;i++)
cin>>origin[i];
for(int i=0;i<1<<16;i++)
{
//暴力搜索所有操作
memcpy(f,origin,sizeof origin);
ans.clear();
int num=0;
for(int s=0;s<16;s++)
{
if((i>>s)&1)
{press(s/4,s%4); num++;ans.push_back({s/4,s%4}); }
}
bool can=1;
for(int q=0;q<4;q++)
for(int w=0;w<4;w++)
if(f[q][w]=='+')
{ can=0; break;}
if(can==1)
{cout<<num<<endl;
for(auto x:ans)
cout<<x.first+1<<" "<<1+x.second<<endl;
return 0;}
}
}