Untitled
unknown
plain_text
2 years ago
1.1 kB
2
Indexable
#include <iostream> #define N 51 using namespace std; char a[5][5]; int b[5][5]; int ans; void doc() { ans=17; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++)cin>>a[i][j]; } int x[N]; int hx[]={0,-1,0,1}; int hy[]={-1,0,1,0}; void doi(int i) { int u=(i-1)/4+1; int v=(i-1)%4+1; b[u][v]=(b[u][v]+1)%2; for(int i=0;i<4;i++) { int uu=u+hx[i]; int vv=v+hy[i]; if(uu>0&&uu<=4&&vv>0&&vv<=4)b[uu][vv]=(b[uu][vv]+1)%2; } } void backtrack(int u,int sum) { if(u==17) { for(int i=1;i<=4;i++) for(int j=1;j<=4;j++){if(a[i][j]=='b')b[i][j]=1;else b[i][j]=0;} for(int i=1;i<=16;i++)if(x[i]) { doi(i); } for(int i=1;i<=4;i++) for(int j=1;j<=4;j++)if(b[i][j]!=b[1][1])goto lan; if(ans>sum)ans=sum; lan:; return; } if(sum<ans){x[u]=0;backtrack(u+1,sum);} if(sum+1<ans){x[u]=1;backtrack(u+1,sum+1);} } int main() { //freopen("input.txt","r",stdin); int TC; cin>>TC; for(int tc=1;tc<=TC;tc++) { doc(); backtrack(1,0); if(ans==17)cout<<"Case #"<<tc<<"\n"<<"impossible"<<"\n";else cout<<"Case #"<<tc<<"\n"<<ans<<"\n"; } return 0; }
Editor is loading...