RT,全WA了,但是样例和一组数据都能过,求大佬查错!
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
#define umap unordered_map
const int N=15;
char numlist[N],a[N];
int n,cnt,num[N][N],book[N];
string sbase[N],safter[N][N];
umap<string,umap<string,string> > mp;
umap<char,int>vis,ans;
il int R () {
re int s=0,f=1;re char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)) {s=(s<<3)+(s<<1)+(ch^48);ch=getchar();}
return s*f;
}
il void input () {
n=R();
for (re int i=1;i<=n;i++) {
re char ch;re string st="";
while (ch=getchar()) {
if (ch=='\n') {sbase[i]+=st;break;}
st+=ch;
}
}
}
il void pre () {
for (re int i=1;i<=n;i++) {
re string st="";re int tot=0;
if (i==1) safter[1][++tot]="+";
for (re int j=(i==1?2:0);j<sbase[i].size();j++) {
if (!isalpha(sbase[i][j])) {safter[i][++tot]=st,st="";continue;}
if (j==sbase[i].size()-1) st+=sbase[i][j],safter[i][++tot]=st,st="";
else st+=sbase[i][j];
if (!vis.count(sbase[i][j])) vis[sbase[i][j]]=1,a[++cnt]=sbase[i][j];
}
}
for (re int i=2;i<=n;i++) {for (re int j=2;j<=n;j++) {mp[safter[1][i]][safter[j][1]]=safter[j][i];}}
return;
}
il int power (int x,int y) {
if (x==0) return 0;
re int ret=1;
while (y) {
if (y%2) ret*=x;
x*=x;
y=(y>>1);
}
return ret;
}
il int cal (string st) {
int ret=0;
for (int i=0;i<st.size();i++) {
char ch=st[i];
ret+=ans[ch]*power(cnt,st.size()-i-1);
}
return ret;
}
il int check () {
for (re int i=2;i<=n;i++) {
for (re int j=2;j<=n;j++) {
string idx=safter[1][i],idy=safter[j][1],idz=safter[j][i];
int x=cal(idx),y=cal(idy),z=cal(idz);
if (x+y!=z) return 0;
}
}
return 1;
}
il void dfs (int step) {
if (step==cnt+1) {
if (check()) {
for (re int i=1;i<=cnt;i++) cout<<a[i]<<'='<<ans[a[i]]<<' ';
puts("");
printf("%d",cnt);
exit(0);
}
return ;
}
for (int i=0;i<cnt;i++) {
if (!vis[i]) {
ans[a[step]]=i;
vis[i]=1;
dfs(step+1);
vis[i]=0;
ans[a[step]]=0;
}
}
}
int main () {
// freopen("1013.in","r",stdin);
// freopen("1013.out","w",stdout);
input();
pre();
check();
dfs(1);
return 0;
}