飞行员兄弟
#include<iostream>
#include<vector>
using namespace std;
//用state保存当前的状态,然后用change保存改变这个数之后需要盖面其他数的位置,最后将枚举每一种状态
int get(int i,int j){
int pos = i*4+j;
return 1<<pos;
}
int change[10][10];
int main(){
int state = 0;
for(int i=0;i<4;i++){
string line;
cin>>line;
for(int j=0;j<4;j++){
if(line[j]=='+')
state += get(i,j);
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k =0;k<4;k++){
change[i][j] += get(i,k);
change[i][j] += get(k,j);
}
change[i][j] -= get(i,j);
}
}
vector<pair<int,int>> res;
for(int i=0;i<1<<16;i++){
int now = state;
vector<pair<int,int>> path;
for(int j=0;j<16;j++){
if(i>>j&1){
now ^= change[j/4][j%4];
path.push_back({j/4,j%4});
}
}
if(!now&&(res.size()==0||res.size()>path.size())) res = path;
}
cout<<res.size()<<endl;
for(auto i:res){
cout<<i.first+1<<" "<<i.second+1<<endl;
}
return 0;
}
网友评论