记录编号 43380 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2010冲刺七]翻转游戏 最终得分 100
用户昵称 GravatarQhelDIV 是否通过 通过
代码语言 C++ 运行时间 0.039 s
提交时间 2012-10-10 08:41:09 内存使用 3.12 MiB
显示代码纯文本
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
long long sta=0,num,Min=~0u>>1;
void Initialize()
{
int i,j;
char A[5][5];
	for(i=1;i<=4;i++)
		for(j=1;j<=4;j++)
		{
			fin>>A[i][j];
			sta<<=1;
			sta+=(A[i][j]=='b'?false:true);
		}
}

void Change(int pos)
{
//itself
	sta=sta^(1<<(pos-1));
//up
	if(pos-4>0)
		sta=sta^(1<<(pos-5));
//left
	if(pos%4!=0)
		sta=sta^(1<<pos);
//down
	if(pos+4<16)
		sta=sta^(1<<(pos+3));
//right
	if(pos%4!=1)
		sta=sta^(1<<(pos-2));
}

bool Check()
{
	if(sta==65535 || sta==0)
		return true;
	return false;
}

void DFS(int pos)
{
int temp=sta;
	if(pos==17)
	{
		if(Check())
			Min=min(Min,num);
		return;
	}
	num++;
	Change(pos);
	DFS(pos+1);
	sta=temp;
	num--;
	
	DFS(pos+1);
}

int main()
{
	Initialize();
	
	DFS(1);
	
	if(Min==~0u>>1)
		fout<<"Impossible"<<endl;
	else
		fout<<Min<<endl;
	
	fin.close();
	fout.close();
	return 0;
}