B3927 [GESP202312 四级] 小杨的字典
B3927 [GESP202312 四级] 小杨的字典 - 洛谷# B3927 [GESP202312 四级] 小杨的字典## 题目背景对应的选择、判断题https://ti.luogu.com.cn/problemset/1136## 题目描述在遥远的星球有两个国家 A 国和 B 国他们使用着不同的语言A 语言和 B 语言。小杨是 B 国的翻译官他的工作是将 A 语言的文章翻译成 B 语言的文章。为了顺利完成工作小杨制作了一本字典里面记录了 $N$ 个 A 语言单词对应的 B 语言单词巧合的是这些单词都由地球上的 26 个小写英文字母组成。小杨希望你写一个程序帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}\|;:,./? 和一些 A 语言单词构成每个单词之间必定由至少一个标点符号分割你的程序需要把这段话中的所有 A 语言单词替换成它的 B 语言翻译。特别地如果遇到不在字典中的单词请使用大写 UNK 来替换它。例如小杨的字典中包含 $2$ 个 A 语言单词 abc 和 d它们的 B 语言翻译分别为 a 和 def那么我们可以把 A 语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. 其中单词 abcd 不在词典内因此我们需要使用 UNK 来替换它。## 输入格式第一行一个整数 $N$表示词典中的条目数。保证 $N \le 100$。接下来 $N$ 行每行两个用单个空格隔开的字符串 $A$ $B$ ,分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有 $A$ 不重复保证 $A$ 和 $B$ 的长度不超过 $10$。最后一行一个字符串 $S$ 表示需要翻译的 A 语言文章。保证字符串 $S$ 的长度不超过 $1000$保证字符串 $S$ 只包含小写字母以及标点符号 !()-[]{}\|;:,./? 。## 输出格式输出一行表示翻译后的结果。## 输入输出样例 #1### 输入 #12abc ad defabc.d.d.abc.abcd### 输出 #1a.def.def.a.UNK## 输入输出样例 #2### 输入 #23abc ad defabcd xxxxabc,(d)d!-abc?abcd### 输出 #2a,(def)def!-a?xxxx## 输入输出样例 #3### 输入 #31abcdefghij klmnopqrst!()-[]{}\|;:,./?abcdefghijklmnopqrstuvwxyz### 输出 #3!()-[]{}\|;:,./?UNK思路根据题目我们可以得知我们需要把S这段话中的每一个 A 字典里面有的单词替换成B字典里面的和它对应的那个单词而标点符号不变并且A 和 B 这两个字典对应的数组都是不能改变的所以我们需要一个用来中转的字符串和一个保存最后数据的字符串其中那个用来中转的字符串改变结果要存入的那一个单词或者标点符号或者字母保存最后数据的字符串就把这个中转的字符串保存到它的内部就行了。代码#include bits/stdc.husing namespace std;typedef long long LL;int main() {LL n;cin n;string s, cnt, jieguo;vectorstring a(n);vectorstring b(n);//这里用静态数组或者动态数组都行for (LL i 0; i n; i) {cin a[i] b[i];}cin s;for (LL i 0; i s.size(); i) {if (!(s[i] a s[i] z)) {bool flag 0;for (LL j 0; j n; j) {if (cnt a[j]) {jieguo b[j];flag 1;break;}}if (flag 0 cnt.size()) {jieguo UNK;}jieguo s[i];cnt.clear();} else {cnt s[i];}}if (cnt.size()) {bool xq 0;for (LL j 0; j n; j) {if (cnt a[j]) {jieguo b[j];xq 1;break;}}if (xq 0 cnt.size()) {jieguo UNK;}}cout jieguo;return 0;}