四个WA,悬关求助!
查看原帖
四个WA,悬关求助!
712506
Lucky_Cloud楼主2023/2/23 13:17

介是蒟蒻的代码,求调 QvQQ v Q

#include <bits/stdc++.h>
#define il inline
using namespace std;

int mb[10];
struct node
{
	int a[10];
	int fa, s;
	char c;
} q[50000];
bool v[50000];
void print(int x)
{
	if(x == 1) return;
	print(q[x].fa);
	cout << q[x].c;
}
bool check(node x)
{
	for(int i = 1; i <= 8; i++)
		if(x.a[i] != mb[i]) return 0;
	return 1;
}
il int jc(int x)
{
	if(x == 0) return 0;
	if(x == 1) return 1;
	return x * jc(x - 1);
}
il int turn(node x)
{
	int res = 0;
	for(int i = 1; i <= 8; i++)
	{
		int s = 0;
		for(int j = i + 1; j <= 8; j++)
			if(x.a[i] > x.a[j]) s++;
		res += s * jc(8 - i);
	}
	return res;
}
il void swapp(int &a, int &b){int x = a; a = b; b = x;}
//--------------------------------
il node A(node);il node B(node);il node C(node);
int main()
{
	int x = 0;
	for(int i = 1; i <= 8; i++) cin >> mb[i];
	int tl = 1, he = 0;
	for(int i = 0; i <= 8; i++) q[tl].a[i] = i;
	q[1].s = 0;
	q[1].fa = 0;
	do
	{
		he++;
		node x = q[he];
		if(check(x))
		{
			cout << x.s << "\n";
//			for(int i = 1; i <= tl; i++)
//			cout << q[i].fa << " " << q[i].s << endl;
			print(he);
			return 0;
		}
		node x1 = A(x);
		node x2 = B(x);
		node x3 = C(x);
		if(!v[turn(x1)])
		{
			q[tl] = x1;
			v[turn(x1)] = 1;
			q[tl].s++, q[tl].c = 'A', q[tl].fa = he; tl++;
		}
		if(!v[turn(x2)])
		{
			q[tl] = x2;
			v[turn(x2)] = 1;
			q[tl].s++, q[tl].c = 'B', q[tl].fa = he; tl++;
		}
		if(!v[turn(x3)])
		{
			q[tl] = x3;
			v[turn(x3)] = 1;
			q[tl].s++, q[tl].c = 'C', q[tl].fa = he; tl++;
		}
	}while(he < tl);
	
	return 0;
}

//--------------------------------
il node A(node x)
{
	for(int i = 1; i <= 4; i++)
		swapp(x.a[i], x.a[9 - i]);
	return x;
}
il node B(node x)
{
	for(int i = 4; i >= 2; i--)
	{
		swapp(x.a[i], x.a[i - 1]);
		swapp(x.a[10 - i], x.a[9 - i]);
	}
	return x;
}
il node C(node x)
{
	swapp(x.a[2], x.a[3]);
	swapp(x.a[7], x.a[6]);
	swapp(x.a[6], x.a[2]);
	return x;
}

案发现场

2023/2/23 13:17
加载中...