洛谷 1071 潜伏者(NOIp2009提高组)

【题意概述】  

  给出三行字符串,前两行代表密码与明文的对应关系,第三行为待翻译的文本。要求按照对应关系翻译文本。

【题解】

  直接模拟即可。 注意判断Failed的情况。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define LL long long
 5 #define rg register
 6 #define N 200010
 7 using namespace std;
 8 int n,m,a[26],b[26];
 9 char s1[N],s2[N],c[N],ans[N];
10 int main(){
11     memset(a,-1,sizeof(a));
12     memset(b,-1,sizeof(b));
13     scanf("%s%s%s",s1,s2,c);
14     m=strlen(s1); n=strlen(c);
15     for(rg int i=0;i<m;i++)
16         if(a[s1[i]-'A']==-1&&b[s2[i]-'A']==-1) a[s1[i]-'A']=s2[i]-'A',b[s2[i]-'A']=s1[i]-'A'; 
17         else
18             if(a[s1[i]-'A']!=s2[i]-'A'||b[s2[i]-'A']!=s1[i]-'A'){
19                 puts("Failed"); return 0;
20             }
21     for(rg int i=0;i<26;i++)if(a[i]==-1){
22         puts("Failed"); return 0;
23     }
24     for(rg int i=0;i<n;i++) 
25         if(a[c[i]-'A']!=-1) ans[i]=(char)(a[c[i]-'A']+'A');
26         else{
27             puts("Failed"); return 0;
28         }
29     for(rg int i=0;i<n;i++) printf("%c",ans[i]);
30     puts("");
31     return 0;
32 }
View Code

 

posted @ 2018-08-03 06:58  Driver_Lao  阅读(326)  评论(0编辑  收藏  举报