题解
2023-03-18 17:48:59
发布于:上海
24阅读
0回复
0点赞
#include <bits/stdc++.h>
#define for0(i,n) for(i=0;i<(n);i++)
#define for1(i,n) for(i=1;i<=(n);i++)
using namespace std;
const int N=30;
int n,num[3][N],t[N];
__int128 a[N],p[N];
bitset<N> u;
char s[N];
void sov(int h){
int i;
scanf("%s",s);
for0(i,n) num[h][i]=s[n-1-i]-'A';
}
bool f(int l){
int i,w,x,y,z;
for(i=l;i<n;i++){
x=t[num[0][i]];y=t[num[1][i]];z=t[num[2][i]];
if(~x&&~y&&~z){
w=x+y-z;
if(w&&w!=n&&w!=-1&&w!=n-1) return 0;
}
}
if(l==n) return a[0]+a[1]==a[2];
return a[0]+a[1]==a[2]||a[0]+a[1]==a[2]+p[l];
}
void dfs(int h,int l){
if(h==3) h=0,l++;
if(!h&&!f(l)) return ;
int i;
if(l==n){
for0(i,n) printf("%d ",t[i]);
exit(0);
}
int &x=t[num[h][l]];
if(~x) a[h]+=p[l]*x,dfs(h+1,l),a[h]-=p[l]*x;
else for(i=n-1;i>=0;i--){
if(u[i]) continue;
x=i;u[i]=1;a[h]+=p[l]*i;
dfs(h+1,l);
x=-1;u[i]=0;a[h]-=p[l]*i;
}
}
int main(){
scanf("%d",&n);
int i;
for0(i,3) sov(i);
p[0]=1;
for1(i,n) p[i]=p[i-1]*n;
memset(t,-1,sizeof(t));
dfs(0,0);
printf("NO ANSWER!\n");
return 0;
}
这里空空如也
有帮助,赞一个