本体模拟一下就好,数据有个坑
英文二十六个字母,他给了二十五个对应,那么最后一个字母也就相应的对应了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[1010],b[1010],c[1010],f[100];
int d[100],num;
bool vis[100];
int main()
{
freopen("enc.in","r",stdin);
freopen("enc.out","w",stdout);
cin>>a>>b;
int l=strlen(a);
for(int i=0;i<l;i++){
int y=b[i]-'a'+1;
if(!d[y]) d[y]++,num++;
else if(f[y]!=a[i]) d[y]++;
if(d[y]==1) f[y]=a[i];
}
if(num==25){
for(int i=1;i<=26;i++)
if(d[i]==0){
for(int j=1;j<=26;j++)
if(i!=j) vis[f[j]-'a'+1]=1;
for(int j=1;j<=26;j++)
if(!vis[j]) {f[i]=j-1+'a';d[i]++;break;}
}
}
cin>>c;
int len=strlen(c);
for(int i=0;i<len;i++){
int v=c[i]-'a'+1;
if(d[v]==0) {puts("ERROR");return 0;}
if(d[v]>1) {puts("ERROR");return 0;}
}
for(int i=0;i<len;i++){
int v=c[i]-'a'+1;
cout<<f[v];
}
return 0;
}