专栏文章

题解:P13986 [PO Final 2023] 降重 / Synonyms

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minycrao
此快照首次捕获于
2025/12/02 10:21
3 个月前
此快照最后确认于
2025/12/02 10:21
3 个月前
查看原文
本题要求将瑞典语单词通过翻译与回译尽量转换为不同的同义词,故可先建立两个字典来保存翻译词,然后建立同义词的集合,在其中任选一个单词进行替换,若为空集则保留原词。
具体实现如下:
PYTHON
n,p,q=int(input()),dict(),dict()
for _ in range(n):
    a,b=input().split()
    p.setdefault(a,[]).append(b) #建立瑞典语单词到翻译词的映射
    q.setdefault(b,[]).append(a) #建立翻译词到瑞典语单词的映射
m,t,r=int(input()),input().split(),[] # r 用来储存替换后的结果
for w in t:
    c=set().union(*[q[i] for i in p[w]])-{w} #列表推导式 [q[i] for i in p[w]] 可对每个翻译词 i 通过 q 找到其对应的所有瑞典语单词,利用 * 解包列表,再用 set().union() 将解包后列表里的所有列表中的元素合并并去重,最后减去原词得到同义词集合
    r.append(next(iter(c)) if c else w) #通过 next(iter(c)) 取集合中的第一个元素(无序可任意选取),若集合为空则选取原词
print(' '.join(r)) #将列表中的单词用空格连接为字符串输出

评论

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

正在加载评论...