时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
64bit IO Format: %lld
题目描述
给你两个长度相同的字符串a,b,现在已知b是a编码之后的结果
比如a = "CAT", b = "DOG", 那么D其实是C,O其实是A,G其实是T
现在给你一个字符串c,如果c能够被解码出来,输出c解码后的字符串,如果不能输出@
比如a = "CAT", b = "DOG", 那么D其实是C,O其实是A,G其实是T
现在给你一个字符串c,如果c能够被解码出来,输出c解码后的字符串,如果不能输出@
输入描述:
输入三行,每行一个字符串,长度在50以内
输出描述:
输出一个字符串
示例3
备注:
子任务1:|a| <= 10 子任务2:|a| <= 40子任务3:无限制c++代码:#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' typedef long long ll; string a, b, c; map<char, char> jiema; vector<bool> visited1; int count1 = 0; int index1 = -1; vector<bool> visited2; int count2 = 0; int index2 = -1; string ret; void init() { visited1.assign(26, false); visited2.assign(26, false); for (int i = 0; i < a.size(); i++) { jiema[b[i]] = a[i]; visited1[b[i] - 'A'] = true; visited2[a[i] - 'A'] = true; } for (int i = 0; i < 26; i++) { if (visited1[i] == true) { count1++; } else { index1 = i; } if (visited2[i] == true) { count2++; } else { index2 = i; } } if (count1 == 25 && count1 == count2) { jiema[index1 + 'A'] = index2 + 'A'; } } void solve() { for (int i = 0; i < c.size(); i++) { if (jiema.count(c[i])) { ret.push_back(jiema[c[i]]); } else { cout << "@" << endl; return; } } cout << ret << endl; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> a >> b >> c; init(); solve(); return 0; }