50pts求助
查看原帖
50pts求助
1009001
HCA_ac_life楼主2024/8/16 20:48
#include<bits/stdc++.h>
using namespace std;
string a,b,c;
int num[27];
bool is_ok[26];
int n=0;
int an[26],bn[26],cn[26];
bool check(){
	for(int i=0;i<n;++i){
		an[i]=num[a[i]-'A'];
		bn[i]=num[b[i]-'A'];
		cn[i]=num[c[i]-'A'];
	}
	int up=0;
	for(int i=n-1;i>=0;--i){
		if((an[i]+bn[i]+up)%n!=cn[i])return false;
		up=(an[i]+bn[i]+up)/n;
	}
	return true;
}
void dfs(int pos){
	if(pos<0){
		if(check()){
			for(int i=0;i<n;i++)
				cout<<num[i]<<" ";
			exit(0);
		}else return;
	}
	for(int i=n-1;i>=0;--i){
		if(is_ok[i])continue;
		is_ok[i]=1;num[pos]=i;
		if(num[a[0]-'A']+num[b[0]-'A']<n)
			dfs(pos-1);
		num[pos]=0;is_ok[i]=0;
	}
}
int main(){
	cin>>n;
	cin>>a>>b>>c;
	dfs(n-1);
	return 0;
} 
2024/8/16 20:48
加载中...