题解:P1071 [NOIP 2009 提高组] 潜伏者

· · 题解

solution

小模拟。

我们开一个映射,记 mp_i 表示字母 i 作为密文时对应的原信息,遍历时若发现 mp_i 对应两个不同的原信息则不合法,遍历后若发现有字母没出现则不合法。最后按题意输出。

通过记录。

code

#include<bits/stdc++.h>
using namespace std;
char a[105], b[105], c[105], mp[205], vis[205];
int main(){
    cin >> a >> b >> c;
    int la=strlen(a), lc=strlen(c);
    for (int i=0; i<la; mp[a[i]]=b[i], vis[b[i]]=1, i++) 
        if (vis[b[i]]&&b[i]!=mp[a[i]]) {
            puts("Failed");
            return 0;
        }
    for (int i='A'; i<='Z'; i++)
        if (!vis[i]) {
            puts("Failed");
            return 0;
        } 
    for (int i=0; i<lc; i++)
        cout << mp[c[i]];
    return 0;
}