10分惨死。。。求大佬拯救ლ(╹◡╹ლ)!!!
查看原帖
10分惨死。。。求大佬拯救ლ(╹◡╹ლ)!!!
225006
FOURQvQ楼主2019/8/5 15:37
#include<bits/stdc++.h>
using namespace std;
int used[30],s[30],n;
struct letter{
	char le;
	int assin,no;
}a1[30],a2[30],a3[30];
bool cmp(letter p,letter q)
{
	return p.le<q.le;
 } 
void translate()
{	memset(s,0,sizeof(s));
	for(int i=1;i<=n;i++)
	{
	for(int j=1;j<=n;j++)
		if(a2[i].le==a1[j].le)
		{
			a2[i].assin=a1[j].assin;
		}
	}
	/*for(int i=1;i<=n;i++)
	{
		cout<<a1[i].assin<<" " ;
	}
	cout<<endl;
		for(int i=1;i<=n;i++)
	{
		cout<<a2[i].assin<<" "; 
	}
	cout<<endl;*/
	for(int i=n;i>0;i--)
	{	if(s[i]+a1[i].assin+a2[i].assin>=n)
			{
				s[i]+=a1[i].assin+a2[i].assin-n;
				s[i-1]+=1;
			}
		else
			s[i]+=a1[i].assin+a2[i].assin;
	}
	/*for(int i=1;i<=n;i++)
	{
		cout<<s[i]<<" " ;
	}
	cout<<endl;*/
}
void assinment()
{
	for(int i=1;i<=n;i++)
	{
	for(int j=1;j<=n;j++)
		if(a3[i].le==a1[j].le)
		{
			a3[i].assin=a1[j].assin;
		}
	}
	/*for(int i=1;i<=n;i++)
	{
		cout<<a3[i].assin<<" "; 
	}
	cout<<endl;*/
}
bool compare()
{
	for(int i=1;i<=n;i++)
	{
	for(int j=1;j<=n;j++)
		if(a3[i].assin!=s[i])
		{
			return false;
		}
	}
	return true;
}
void dfs(int dep)
{
	if(dep==n+1)
	{	assinment();
		translate();
		if(compare())
		{
			 sort(a1+1,a1+1+n,cmp);
			 for(int h=1;h<=n;h++)
			 {
			 	cout<<a1[h].assin<<" ";
			 }
	    }
	    return;
	}
	for(int i=0;i<n;i++)
	{	if(used[i]==0)
			{
			a1[dep].assin=i; 
			used[i]=1;
			dfs(dep+1);
			used[i]=0;
			}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		{
		cin>>a1[i].le;
		a1[i].no=i;
		}
	for(int i=1;i<=n;i++)
		{
		cin>>a2[i].le;
		}
	for(int i=1;i<=n;i++)
		{
		cin>>a3[i].le;
		}
	dfs(1); 
	
	return 0;
}
2019/8/5 15:37
加载中...