洛谷——P1071 [NOIP2009 提高组] 潜伏者

本次博客,我将记录洛谷P1071 潜伏者

[NOIP2009 提高组] 潜伏者

理解题意:
对于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;
}

本文完

posted @ 2022-10-06 17:47  Sky6634  阅读(371)  评论(0)    收藏  举报