记录编号 178180 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2010冲刺七]翻转游戏 最终得分 100
用户昵称 Gravatar<蒟蒻>我要喝豆奶 是否通过 通过
代码语言 C++ 运行时间 0.362 s
提交时间 2015-08-13 13:59:00 内存使用 0.27 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#define n 5
using namespace std;

int a[n][n];
bool vis[45];
int f[n][n];
int ans=0x7fffffff;

int g(int k){
	if(k==1)	
		return 0;
	if(k==0)
		return 1;
}

void pd(void){
	int tot=0,y,x;
	for(int i=1;i<n;i++)
		for(int j=1;j<n;j++)
			f[i][j]=a[i][j];
	for(int i=1;i<=16;i++){
		if(vis[i]){
			tot++;
			if(i%4==0)
				x=i/4,y=4;					
			else
				x=i/4+1,y=i%4;
			f[x][y]=g(f[x][y]);
			f[x+1][y]=g(f[x+1][y]);
			f[x-1][y]=g(f[x-1][y]);
			f[x][y-1]=g(f[x][y-1]);
			f[x][y+1]=g(f[x][y+1]);
		}
	}
	int t=f[1][1];
	for(int i=1;i<n;i++)
		for(int j=1;j<n;j++)
			if(f[i][j]!=t){
				return ;
			}
	ans=min(ans,tot);
	return ;
}

void dfs(int pos,int data){
	vis[pos]=data;
	if(pos==16){
		pd();
		return;
	}
	dfs(pos+1,1);
	dfs(pos+1,0);
	return;
}

int main(){
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	for(int i=1;i<n;i++)
		for(int j=1;j<n;j++){
			char x;
			cin>>x;
			if(x=='b')
				a[i][j]=1;
			else
				a[i][j]=0;
		}
	dfs(0,0);
	if(ans>=0x3fffffff)
		cout<<"Impossible";
	else
		cout<<ans;
	return 0;
}