比赛 EYOI与SBOI开学欢乐赛4th 评测结果 AAAAA
题目名称 Cafe Stella 最终得分 100
用户昵称 ZRQ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-12 21:15:15
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int N=1010;
struct add
{
	int a,b,c,d;//a+b=cd
}f[N];
int n,ans[N],cnt;
bool done[N],ff; 
bool vis[N];
char cha[N];
map<char,int> mp; 
char ch;
bool judge()
{
	for(int i=1;i<=cnt;++i)
	{
		if(f[i].d==0&&ans[f[i].a]+ans[f[i].b]!=ans[f[i].c]) return 0;
		else if(f[i].d!=0&&ans[f[i].a]+ans[f[i].b]!=ans[f[i].d]+n-1) return 0;
	}
	return 1;
}
void DFS(int nw)
{
	if(nw==n)
	{
		if(judge())
		{
			for(int i=1;i<=n-1;++i) cout<<cha[i]<<'='<<ans[i]<<' ';
			cout<<'\n'<<n-1<<'\n';
			ff=1;
		}
		return ;
	}
	if(done[nw]) DFS(nw+1);
	else 
		for(int i=0;i<=n-2;++i)
			if(!vis[i])
			{
				ans[nw]=i;
				vis[i]=1;
				DFS(nw+1);
				vis[i]=0;
			}
	return ;
}
int main()
{
	freopen("murasame_adultxp3.in","r",stdin);
	freopen("murasame_adultxp3.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		cin>>ch;
		if(i>1) mp[ch]=i-1,cha[i-1]=ch;
	}
	string str;
	for(int i=2;i<=n;++i)
		for(int j=1;j<=n;++j)
		{
			cin>>str;
			if(j>1) 
			{
				f[++cnt]=(add){i-1,j-1,mp[str[0]]};
				if(str.size()>1) f[cnt].d=mp[str[1]],ans[mp[str[0]]]=1,done[mp[str[0]]]=1,vis[1]=1;
			}
		}
	DFS(1);
	if(!ff) printf("FccKcuf");
	return 0;
}