P1071 [NOIP 2009 提高组] 潜伏者

· · 算法·理论

使用map,记mp_i表示字母i作为密文时对应的原信息,遍历时若发现mp_i对应两个不同的原信息则不合法,遍历后若发现有字母没出现则不合法

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn(1e5+10);
int n;
string a,b,c;
map<char,char>mp;
bool vis[maxn];
int main(){
    cin>>a>>b>>c;
    for(int i(0);i<a.size();i++){
        if(vis[b[i]]&&mp[a[i]]!=b[i]){
            cout<<"Failed\n";
            return 0;
        }
        mp[a[i]]=b[i];
        vis[b[i]]=true;
    }
    for(int i('A');i<='Z';i++){
        if(!vis[i]){
            cout<<"Failed\n";
            return 0;
        }
    }
    for(int i(0);i<c.size();i++){
        cout<<mp[c[i]];
    }
    return 0;
}