RT,求大佬帮忙看一下~
提交信息:check here
#include <bits/stdc++.h>
using namespace std;
int n;
string jia[2],sum;
int num[30];
int t_sum[30];
int fflag=0;
map<int,int>mp;
int aans[30];
map<pair<char,char>,char>mp2;
void dfs(int dep)
{
if(dep>3)
for(int i=0;i<n;i++)
{
if(mp[jia[0][i]]!=1||mp[jia[1][i]]!=1||mp[sum[i]]!=1)
{
continue;
}
int kkk;
if(num[jia[0][i]]+num[jia[1][i]]>=10)kkk=num[sum[i]]+10;
else kkk=num[sum[i]];
if(!(num[jia[0][i]]+num[jia[1][i]]-kkk==1||num[jia[0][i]]+num[jia[1][i]]-kkk==0))
return ;
}
if(dep==n)
{
for(int i=n-1;i>=0;i--)
{
t_sum[n-i-1]=num[sum[i]-'A'];
}
int a[30],b[30],ans[30];
for(int i=n-1;i>=0;i--)
{
a[n-i-1]=num[jia[0][i]-'A'];
b[n-i-1]=num[jia[1][i]-'A'];
}
memset(ans,0,sizeof(ans));
for(int i=0;i<n;i++)
{
ans[i]+=a[i]+b[i];
if(ans[i]>=n)
{
ans[i]-=n;
ans[i+1]++;
}
}
int flag=1;
for(int i=0;i<n;i++)
{
if(ans[i]!=t_sum[i])flag=0;
}
if(flag==1)
{
fflag=1;
}
return ;
}
for(int i=n-1;i>=0;i--)
if(mp[i]!=1)
{
mp[i]=1;
num[dep]=i;
dfs(dep+1);
if(fflag==1)return ;
mp[i]=0;
num[dep]=-1;
}
}
int main()
{
memset(num,-1,sizeof(num));
scanf("%d",&n);
cin>>jia[0]>>jia[1];
cin>>sum;
for(int i=0;i<n;i++)
{
mp2[make_pair(jia[0][i],jia[1][i])]=sum[i];
}
dfs(0);
for(int i=0;i<n;i++)cout<<num[i]<<" ";
return 0;
}