RE求调
查看原帖
RE求调
958732
DYF6friend楼主2025/7/19 09:07

拍了两千多个点没拍出来RE的情况

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
//#define debug
using namespace std;
inline int read()
{
	char c=getchar();
	int f=1,x=0;
	while (c<'0'||c>'9'){if (c=='-')f=-1;c=getchar();}
	while (c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return f*x;
}
inline void write(int x){
	if (x<0){putchar('-');write(-x);return;}
	if (x>=10)write(x/10);
	putchar(x%10+'0');
}
bool st;
struct node{
	int mp[4][4];
	int emp[2][2];
	bool check()
	{
		for (int i=0;i<=3;i++)
		{
			for (int j=1;j<=3;j++)
			{
				if (mp[i][j]!=mp[i][0])break;
				if (j==3)return 1;
			}
		}
		for (int i=0;i<=3;i++)
		{
			for (int j=1;j<=3;j++)
			{
				if (mp[j][i]!=mp[0][i])break;
				if (j==3)return 1;
			}
		}
		for (int i=1;i<=3;i++)
		{
			if (mp[i][i]!=mp[0][0])break;
			if (i==3)return 1;
		}
		for (int i=1;i<=3;i++)
		{
			if (mp[i][3-i]!=mp[0][3])break;
			if (i==3)return 1;
		}
		return 0;
	}
	void find_empty()
	{
		int cnt=0;
		for (int i=0;i<=3;i++)
		{
			for (int j=0;j<=3;j++)
			{
				if (!mp[i][j])
				{
					emp[cnt][0]=i;
					emp[cnt][1]=j;
					cnt++;
				}
			}
		}
	}
}beg;
int dictx[4]={0,0,1,-1},dicty[4]={1,-1,0,0};
bool ed;
bool dfs(node x,int now,int dep,int purpose_dep)
{
	if (dep==purpose_dep)
	{
		if (x.check())return 1;
		return 0;
	}
	x.find_empty();
	for (int kkk=0;kkk<=1;kkk++)
	{
		for (int op=0;op<=3;op++)
		{
			int dx=x.emp[kkk][0]+dictx[op],dy=x.emp[kkk][1]+dicty[op];
			if (dx<0||dx>3||dy<0||dy>3)continue;
			if (x.mp[dx][dy]==now)
			{
				swap(x.mp[dx][dy],x.mp[x.emp[kkk][0]][x.emp[kkk][1]]);
				if (dfs(x,now^3,dep+1,purpose_dep))return 1;
				swap(x.mp[dx][dy],x.mp[x.emp[kkk][0]][x.emp[kkk][1]]);
			}
		}
	}
	return 0;
}
signed main()
{
	//freopen("data.in","r",stdin);
	//freopen("data.out","w",stdout);
	cerr<<"using "<<(&ed-&st)/1024.0/1024.0<<" Mb(s)"<<endl;
	for (int i=0;i<=3;i++)
	{
		for (int j=0;j<=3;j++)
		{
			char c=getchar();
			if (c=='B')beg.mp[i][j]=1;
			if (c=='W')beg.mp[i][j]=2;
		}
		getchar();
	}
	int dep=0;
	for (int i=1;i<=1145141919;i++)
	{
		if (dfs(beg,1,0,dep))
		{
			cout<<dep;
			return 0;
		}
		if (dfs(beg,2,0,dep))
		{
			cout<<dep;
			return 0;
		}
		dep++;
	}
	return 0;
}
2025/7/19 09:07
加载中...