题目:116. 飞行员兄弟
思路:2^16小于 10^7
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
char a[5][5],b[5][5];
void turn_all(int x,int y){
for(int i=0;i<4;i++){
if(a[x][i]=='+')
a[x][i]='-';
else
a[x][i]='+';
}
for(int i=0;i<4;i++){
if(a[i][y]=='+')
a[i][y]='-';
else
a[i][y]='+';
}
if(a[x][y]=='+')
a[x][y]='-';
else
a[x][y]='+';
}
int main(){
for(int i=0;i<4;i++){
scanf("%s",&a[i]);
}
memcpy(b,a,sizeof(a));
int minn=20,minnz=0;
for(int i=0;i<(1<<16);i++){
memcpy(a,b,sizeof(b));
int ans=0;
for(int j=0;j<16;j++){
if((i>>j)&1){
ans++;
turn_all(j/4,j%4);
}
}
bool flag=1;
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
if(a[j][k]=='+'){
flag=0;
break;
}
}
if(flag==0) break;
}
if(flag&&minn>ans){
minn=ans;
minnz=i;
}
}
cout<<minn<<endl;
for(int i=0;i<16;i++){
if((minnz>>i)&1){
cout<<i/4+1<<" "<<i%4+1<<endl;
}
}
return 0;
}