潜伏者 题解【基础版,无map】
2026-07-23 15:42:47
发布于:河南
13阅读
0回复
0点赞
1.题目大意
预设:有一个字母加密密码,一个字母对应一个加密字符。如A→D,B→E...
题目:
你收到仨字符串
- 第一个密文
- 第二个对应的明文
- 第三个让你去求解的密文
以下两个条件满足,无法破译,则输出Failed
- 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
- 扫描中发现掌握的信息里有明显的自相矛盾或错误(如ABC→XYX不成立)
否则输出第三个字符串对应的明文!
2.思路 见3
3.参考代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char ysb[27]={};
int tong1[27]={},tong2[27]={};
string a,b,c;
int main(){
cin>>a>>b>>c;
for(int i=0;i<a.size();i++)tong1[a[i]-'A'+1]++,tong2[b[i]-'A'+1]++;//统计A、B中每个字符出现次数:桶
for(int i=1;i<=26;i++)//如果输入的B不包含全部26字符输出Failed
if(tong2[i]==0){
cout<<"Failed";
return 0;
}
sort(tong1+1,tong1+27);//排序两个桶↓
sort(tong2+1,tong2+27);// ↓
for(int i=1;i<=26;i++) //是为了统计名文和密文是否一一对应!
if(tong1[i]!=tong2[i]){//不一一对应输出Failed
cout<<"Failed";
return 0;
}
for(int i=0;i<a.size();i++) ysb[a[i]-'A'+2]=b[i];//制造映射表
for(int i=0;i<c.size();i++) for(int j=1;j<27;j++) if(c[i]==char(j+64)) cout<<ysb[j+1];//在映射表中提取字符
return 0;
}
这里空空如也





有帮助,赞一个