比赛 20241024 评测结果 AAAAAAAAAA
题目名称 费解的开关 最终得分 100
用户昵称 wdsjl 运行时间 1.072 s
代码语言 C++ 内存使用 132.14 MiB
提交时间 2024-10-24 11:12:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

queue<int> q;
int ans,x;
short l[1<<26];

int qf(int x,int y){
	x^=(1<<y);
	if(y>4)x^=(1<<(y-5));
	if(y<20) x^=(1<<y+5);
	if(y%5!=0) x^=(1<<y-1);
	if(y%5<4) x^=(1<<(y+1));
	return x;
}

void bfs(){
	memset(l,-1,sizeof l);
	q.push((1<<25)-1);
	l[(1<<25)-1]=0;
	while(!q.empty()){
		int t=q.front();
		q.pop();
		if(l[t]>=6)break;
		for(int i=0;i<25;i++){
			if(l[qf(t,i)]==-1){
				q.push(qf(t,i));
				l[qf(t,i)]=l[t]+1;
			}
		}
	}
	return;
}

int main(){
	freopen("switch.in","r",stdin);
	freopen("switch.out","w",stdout);
	int n;
	cin>>n;
	bfs();
	while(n--){
		int x=0;
		for(int i=0;i<5;i++){
			for(int j=0;j<5;j++){
				int t;
				scanf("%1d",&t);
				if(t) x=x|(1<<(i*5+j));
			}
		}
		cout<<l[x]<<endl;
	}
	return 0;
}