病毒(virus) 题解 - 拓扑排序

本文介绍了一种病毒将文档中字母替换的恢复方法,通过使用拓扑排序来找出字母替换的规律。首先,从病毒感染的字典中,通过比较相邻单词的不同字母建立关系图。接着,进行拓扑排序,如果存在环则无解,若映射不完整则表明词典不完整。最后,根据排序结果恢复原始字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。

输入格式
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。

输出格式
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。

样例

样例输入
6
cebdbac
cac
ecd
dca
aba
bac
cedab
样例输出
abcde


思路


这一道题最先看的时候,发现这什么鬼题?
之后我看了题解后,我终于知道怎么套进 用拓扑排序了


我们可以使用 s t r i n g string string来存储输入的字符串。
我们可以比较相邻两个词第一个不相同的字母,后面就不能比较了,因为我们无法确定它们的顺序。
因为拥有字符串之间的大小关系,所以可以快快乐乐 建图了。之后就可以使用拓扑排序,把病毒的字母大小的排列方式拿出来,同时再与真实字符串相联系起来(可以用 M a p Map Map),最后求出正确字符串。

在这当中,一定要注意 0 0 0的情况:
1、若其中没有字母入度为零,即代表有环,那么就无解(想一想,一个最小的却要求比最开始的要大,肯定不可能)
2、若最后字符串中映射不完整,那么就代表所给词典不完整


这一题,主要突破点在于字符串字符的有序性,所以可以做出来。

代码

#include<cstdio>
#include<vector>
#include<iostream>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值