洛谷P1071 潜伏者(水题

题目描述太多了就不复制了,大意是给s1和s2两个字符串,其中s1为被加密过的,s2为没被加密的原串。加密方式是原来字母被另一个字母所表示。用map表示很简单的。

然后再给一个字符串要你翻译解开。

题目要求是说,必须26个字母都有对应的解码,一个字母只能被一个字母所表示。不符合就翻译失败,符合就输出翻译结果。

上午洛谷随便专题抓的,,有个例子没过,手快按了数据下载x,又面向数据编程了,发现自己没有处理一个字母被两个字母表示的情况x,这个习惯问题很大,,尽量自己找bug,不要直接看数据

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 1e3+7;
 5 char s1[N],s2[N],fina[N];
 6 map<char,char>mp,mmp;
 7 int main(){
 8     ios::sync_with_stdio(0);
 9     cin>>s1>>s2>>fina;
10     int l = strlen(s1);
11     for(int i = 0;i < l;++i){
12         if(!mp[s1[i]]){    mp[s1[i]] = s2[i];    mmp[s2[i]] = s1[i];//x-y y-x
13         }
14         else if(mp[s1[i]]!=s2[i]){cout<<"Failed"<<endl;return 0;}
15     }
16     if(mp.size()<26||mmp.size()<26){cout<<"Failed"<<endl;return 0;}//查验有没有一个字母被两个映射了
17     int l2 = strlen(fina);
18     for(int i = 0;i < l2;++i){
19         fina[i] = mp[fina[i]];
20     }
21     cout<<fina<<endl;
22 }
原文地址:https://www.cnblogs.com/h404nofound/p/12179740.html