超蒻,怀疑有HACK
  • 板块P1347 排序
  • 楼主FarmerDrone
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/15 21:51
  • 上次更新2024/3/16 08:55:11
查看原帖
超蒻,怀疑有HACK
1122193
FarmerDrone楼主2024/3/15 21:51

蒟蒻几乎没学图论,代码感觉像答辩,居然过了,问有没有HACK(没有紫衫,不是想发题解)

#include<bits/stdc++.h>
using namespace std;
int n;
int Cnt[30];
string ans;

class one
{
	public:
		int num;
		int out[26];		
} N[26];

inline int Int(char ch)
{
	return ch - 'A';	
}

inline char Char(int x)
{
	return x + 'A'; 
}

void start()
{
	for (int i = 0; i < 26; i++)
		N[i].num = 0;
}//构造函数忘了

void Printf(int x, int op)
{
	if (op == 1)
		printf("Sorted sequence determined after %d relations: ", x);
	if (op == 2)
		printf("Inconsistency found after %d relations.", x);
	if (op == 3)
		printf("Sorted sequence cannot be determined.");	
}

void d(int s, int &cnt, int M, int &f2);

int main()
{
	int m;
	start();
	scanf("%d%d", &n, &m);
	char a, b;
	for (int M = 1; M <= m; M++)
	{
		f1:
		if (M > m)
			break;
		cin >> a >> b >> b;
		if (a == b)
		{
			Printf(M, 2);
			return 0;
		}
		for (int i = 0; i < N[Int(a)].num; i++)
			if (N[Int(a)].out[i] == Int(b))
			{
				M++;
				goto f1;
			}
		N[Int(a)].out[N[Int(a)].num] = Int(b);
		N[Int(a)].num++;
		for (int i = 0; i < n; i++)
		{
			int cnt = 0;
			int f2 = 0; 
			d(i, cnt, M, f2);
			if (f2 == 2)
			{
				Printf(M, 2);
				return 0; 
			}
			if (f2 == 1)
			{
				Printf(M, 1);
				cout << ans << "." << endl;
				return 0;
			}
		}
	}
	Printf(0, 3);
	return 0;
}

void d(int s, int &cnt, int M, int &f2)
{
	for (int i = 0; i < cnt; i++)
		if (s == Cnt[i])
		{
			f2 = 2;
			return;
		}
	Cnt[cnt] = s;
	cnt++;
	if (cnt == n)
	{
		for (int i = 0; i < cnt; i++)
			ans += Char(Cnt[i]);
		if (f2 != 2)
			f2 = 1;
	}
	for (int i = 0; i < N[s].num; i++)
		d(N[s].out[i], cnt, M, f2);
	cnt--;
}
2024/3/15 21:51
加载中...