Untitled

 avatar
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...