本次博客,我将记录洛谷P1071 潜伏者
理解题意:
对于failed的情况,有以下三种:
1.扫描完毕后发现某个字母没有对应的翻译
2.扫描过程中发现自相矛盾,这种情况分两种,一种是某个密文对应多种翻译(比如前面已经把A翻译成B, 后面又把A翻译成C);另一种是某个翻译对应多个密文(比如先把A翻译成B,接着又把C翻译成B,这样虽然符合我们的常识,但不符合题意)
解题思路
我的解题思路很简单,就是利用数组映射26个英文字母,通过两个char型数组实现密文-翻译以及翻译-密文的映射
代码如下:
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
//三条信息,分别对应加密信息,原信息和待翻译的信息
string str1,str2,str3,str;
char ch[26]={0};//密文-翻译
char ch1[26]={0};//翻译-密文
int main()
{
cin>>str1>>str2>>str3;
for(int i=0;i<str1.length();i++){
//如果没有该记录,记录信息
if(ch[str1[i]-'A']==0&&ch1[str2[i]-'A']==0) ch[str1[i]-'A']=str2[i],ch1[str2[i]-'A']=str1[i];
//如果已经存在该信息
else{
if(ch[str1[i]-'A']!=str2[i]||ch1[str2[i]-'A']!=str1[i]){
cout<<"Failed";
return 0;
}
}
}
for(int i=0;i<26;i++){
if(ch[i]==0){
cout<<"Failed";
return 0;
}
}
for(int i=0;i<str3.length();i++){
str+=ch[str3[i]-'A'];
}
cout<<str;
return 0;
}
本文完
标签:翻译,洛谷,NOIP2009,char,翻译成,26,密文,P1071 From: https://www.cnblogs.com/Sky6634/p/16758110.html