0分求助
查看原帖
0分求助
941575
Stars_visitor_tyw楼主2025/1/16 11:38

半年前没调出来的题竟放到了作业题单

所以说不能咕题

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t;
string s;
struct node
{
	int x, step;
};
bool vis[1<<26];
int bfs(int x)
{
	queue<node> q;
	q.push((node){x,0});
	while(!q.empty())
	{
		auto i=q.front();
		q.pop();
		int cur=i.x;
		int step=i.step;
		if(step>=7)break;
		if(vis[cur])continue;
		if((1<<26)-1==cur)return step;
		vis[cur]=1;
		for(int i=1;i<=25;i++)
		{
			int tmp1=i-5, tmp2=i+5, tmp3=i-1, tmp4=i+1, tmp5=step;
			if(tmp1>0)
			{
				tmp5^=(1<<tmp1);
			}
			if(tmp2<25)
			{
				tmp5^=(1<<tmp2);
			}
			if(tmp3%5)
			{
				tmp5^=(1<<tmp3);
			}
			if(tmp4%5!=1)
			{
				tmp5^=(1<<tmp4);
			}
			q.push((node){tmp5,step+1});
		}
	}
	return -1;
}
signed main()
{
	for(cin>>t;t;t--)
	{
		s="";
		for(int i=1;i<26;i++)
		{
			char x;
			cin>>x;
			s+=x;
		}
//		cout<<s<<"\n";
		int sum=0, cnt=1;
		for(int i=24;i>0;i--)
		{
			cnt*=2;
			sum+=cnt*(s[i]-'0');
		}
		cout<<bfs(sum)<<"\n";
	} 
}
2025/1/16 11:38
加载中...