专栏文章

题解:P13311 [GCJ 2012 Qualification] Speaking in Tongues

P13311题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miourcp9
此快照首次捕获于
2025/12/03 01:29
3 个月前
此快照最后确认于
2025/12/03 01:29
3 个月前
查看原文

解法说明

由题目可知:在本题中,所有的字母都是一一对应转换。那么我们便可以从样例中推导转换。如:ejp mysljylc kd kxveddknmc re jsicpdrysi 会转换为 our language is impossible to understand 其中:e 变为 o,j 变为 u……以此类推。我们便可以得到一个字母转换表。这里我使用 map 进行存储。
CPP

map<char, char>w = {
	{'a', 'y'}, {'b', 'h'}, {'c', 'e'}, {'d', 's'}, {'e', 'o'},
	{'f', 'c'}, {'g', 'v'}, {'h', 'x'}, {'i', 'd'}, {'j', 'u'},
	{'k', 'i'}, {'l', 'g'}, {'m', 'l'}, {'n', 'b'}, {'o', 'k'},
	{'p', 'r'}, {'q', 'z'}, {'r', 't'}, {'s', 'n'}, {'t', 'w'},
	{'u', 'j'}, {'v', 'p'}, {'w', 'f'}, {'x', 'm'}, {'y', 'a'},
	{'z', 'q'}
};
考虑到常规的 cin 输入字符串遇到空格时会停止输入,于是我们可以使用 getline(cin, s); 进行整行输入,之后再对照字母转换表进行转换后输出即可。

完整代码

CPP
#include <bits/stdc++.h>
using namespace std;

map<char, char>w = {
	{'a', 'y'}, {'b', 'h'}, {'c', 'e'}, {'d', 's'}, {'e', 'o'},
	{'f', 'c'}, {'g', 'v'}, {'h', 'x'}, {'i', 'd'}, {'j', 'u'},
	{'k', 'i'}, {'l', 'g'}, {'m', 'l'}, {'n', 'b'}, {'o', 'k'},
	{'p', 'r'}, {'q', 'z'}, {'r', 't'}, {'s', 'n'}, {'t', 'w'},
	{'u', 'j'}, {'v', 'p'}, {'w', 'f'}, {'x', 'm'}, {'y', 'a'},
	{'z', 'q'}
};

long long n;
string s;

int main() {
	cin >> n ;
	getline(cin, s);
	for (int i = 1; i <= n; i++) {
		getline(cin, s);
		cout << "Case #" << i << ": ";
		for (int j = 0; j < s.size(); j++) {
			if (s[j] == ' ') {
				cout << " ";
			} else {
				cout << w[s[j]];
			}
		}
		cout << endl;
	}
	return 0;
}
最后,如果觉得这篇题解对您有用处的话,请点赞支持一下,谢谢。

评论

0 条评论,欢迎与作者交流。

正在加载评论...