搜索
热搜: NOIP OIer 神牛
查看: 334|回复: 0

1414 病毒

[复制链接]

主题

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2021-6-9 20:57:40 | 显示全部楼层 |阅读模式
本帖最后由 毕祖铭 于 2021-6-9 13:05 编辑

一.题目描述
       有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。

现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。

现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。
二.输入
    第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。
三.输出
       输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。
四.题目分类
       拓扑排序:由于病毒是只将字符进行改变,所以改变前后有联系,可以使用map进行映射,表示正常的字典序和经过病毒更改后的字符
       (对分类中的关键路径表示不解)      
(・∀・(・∀・(・∀・*)
五.引入思路
由于它所给的单词是有序的,所以我们要在单词中找到可能存在的字母顺序(即某个比某个大)思考一番,我们自己查英语字典的时候,比如(cap),我们是先确定第一个字母是c,在查找c在字典中的位置,而接下来我们要继续向后查找第二个字母a,所以我们可能先会翻到首字母c,然后在c字母所对的序列中找到a,最后在ca序列中找到p字母。在ca序列中查找p时会翻过a.b.c……故可以轻松得到p在字典序中位于a.b.c->o之后,更长的单词亦是如此。
但这和病毒有什么关系呢?依题可知输入中每个单词都是按字典序排列的,所以我们需要且只能比较相邻两个词第一个不相同的字母,来得到字母的大小关系。
【注】找到相邻两词第一个不同字母后就无法比较后面的字母了。
              例:camp和cup 从这两个单词中只能得到a<u,却无法得到m<p等
       诸如此类,只能比较相邻的第一个不同字母就继续向后判断
得到大小关系后就可以建图了,运用拓扑排序把病毒的修改顺序和原先字母排在一起(map存储,最后将要更改的字母进行映射即可)
特判:1.是否有可能map无法匹配出输入的字母所对应的病毒_字母(即无解)输出0
                2.是否有环
1414:病毒 奇迹创客OJ (singera.cn)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

津ICP备19006949号-1 | 津公网安备12010102000465号

快速回复 返回顶部 返回列表