本贴结。 已调出。
by End1essSummer @ 2022-05-04 17:14:09
最终代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
int a[30],b[30],c[30],nex[30],nextop,num[30],n;
char sta[30],stb[30],stc[30];
bool nu[30];
bool CP(){
for(int i=1;i<=n;i++){
if(num[a[i]]==-1||num[b[i]]==-1||num[c[i]]==-1){
continue;
}else{
int t=num[a[i]]+num[b[i]];
if(!(((t+1)%n!=num[c[i]])^((t)%n!=num[c[i]]))){
return 1;
}
}
}return 0;
}bool J(){
for(int i=1,x=0;i<=n;i++){
int t=(num[a[i]]+num[b[i]]+x);
if(t%n!=num[c[i]]){
return 1;
}x=t/n;
}return 0;
}void init(){
for(int i=1;i<=n;i++){
a[i]=(sta[n-i]-'A')+1;
b[i]=(stb[n-i]-'A')+1;
c[i]=(stc[n-i]-'A')+1;
}return;
}void print(){
for(int i=1;i<n;i++){
cout<<num[i]<<" ";
}cout<<num[n]<<"\n";
exit(0);
}void dfs(int step){
if(CP()) return;
if(step==n+1){
if(J()) return;
else{
print();
return;
}
}else{
for(int i=n-1;i>=0;i--){
if(!nu[i]){
nu[i]=1;
num[nex[step]]=i;
dfs(step+1);
num[nex[step]]=-1;
nu[i]=0;
}
}
}
}void GN(int x){
if(!nu[x]){
nu[x]=1;
nextop++;
nex[nextop]=x;
}return;
}int main(){
//cout<<1<<" ";
scanf("%d",&n);
scanf("%s",sta);
scanf("%s",stb);
scanf("%s",stc);
//cout<<sta<<'\n'<<stb<<'\n'<<stc<<'\n';
for(int i=n-1;i>=0;i--){
num[i]=-1;
}init();
for(int i=1;i<=n;i++){
GN(a[i]);
GN(b[i]);
GN(c[i]);
}memset(nu,0,sizeof(nu));
dfs(1);
return 0;
}
```
by End1essSummer @ 2022-05-04 17:16:43
@[x1a0kr](/user/453460) 大佬太执着了,点赞!
by LiuTianyou @ 2022-07-06 09:47:51