病毒virus - 拓扑排序
题目描述
有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。
输入格式
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。
输出格式
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。
样例输入
6 cebdbac cac ecd dca aba bac cedab |
样例输出
abcde |
分析
有很多人一开始看不懂题意,本人一开始也没看懂,之后仔细想了想就明白了。其实,题目就是给你一些按字典序排好的单词,然后让你用这些关系找出感染后的字母与原字母的关系。既然已知是字典序,那就简单了。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
int n,mapp[27][27],du[27],bk[27],cnt;
map<char,char> dir;//用来存放对应关系,用普通数组也行
char ans[1000000];
string s[100000],str;
int main() {scanf("%d",&n);for (int i = 1;i <= n;i++) cin>>s[i];cin>>str;for (int i = 2;i <= n;i++) {int j=0;while (j<min(s[i].length(),s[i-1].length())) {//根据字典序的特征,从前往后第一个不同字母if (s[i][j]!=s[i-1][j]) {//排在前面的那个一定在后一个的后面. mapp[s[i-1][j]-'a'+1][s[i][j]-'a'+1]=1;//建图 du[s[i][j]-'a'+1]++;bk[s[i-1][j]-'a'+1]++;bk[s[i][j]-'a'+1]++;break;}j++;}}for (int i = 1;i <= 26;i++) {if (bk[i]) cnt++;//统计使用的字母数量,方便拓扑 }for (int i = 1;i <= cnt;i++) {int j=1;while (j<=26&&(du[j]||!bk[j])) j++;//入度为0且被用过了 if (j==26+1) {//没有入度为0且被用过的字母,给的字典有问题 printf("0");return 0;}dir[j-1+'a']='a'+i-1;du[j]=-1;for (int k = 1;k <= 26;k++) {if (mapp[j][k]) du[k]--;}}for (int i = 0;i < str.length();i++) {if (!dir[str[i]]) {//没有字母的对应,字典不完整 printf("0");return 0;}ans[i]=dir[str[i]];}printf("%s",ans);return 0;
}
对应解释应该在代码里说得很详细了,这里就不过多赘述。
病毒virus - 拓扑排序相关推荐
- C++解题报告:病毒(virus)——拓扑排序
题目描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪 ...
- 病毒virus(拓扑排序)
~目录啊~ 题目 思路 Code 题目 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. ...
- 病毒(virus) 题解 - 拓扑排序
题目 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪明, ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 609 Solved: 318 [Submit][Status][ ...
- 题解报告:hihoCoder #1175:拓扑排序·二
题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...
- 病毒 (virus)
病毒 (virus) 题目描述 题目描述 有一天,小y 突然发现自己的计算机感染了一种病毒! 还好,小y 发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母 ...
- HihoCoder - 1175 拓扑排序·二
描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息: 校园 ...
- hihoCoder 1175 拓扑排序
hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...
- 图论 —— AOV 网与拓扑排序
[AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...
最新文章
- ObservableCollection排序
- OpenCASCADE:拓扑 API之历史支持
- /etc/network/interfaces
- [渝粤教育] 中国地质大学 电力系统保护原理 复习题 (2)
- python实现计算最少完美平方数
- 编译源码时出现 Checking API: checkapi-last (unknown): error 17解决方法
- go语言报错:main redeclared in this block
- [转]DataGridView显示行号的几种方法
- 简单的 Nodejs jade 实现Hello world
- 无人机航测流程—市县城镇开发边界内1:500地形图
- Food Webs - 网络中度及集聚系数实现
- Transaction-based classification and detection approach for Ethereum smart contract
- Android设置全屏代码
- 必要的先决条件安装失败_先决条件
- 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件
- HDU 3236 Gift Hunting (程序猿的哄女朋友方式)
- 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)
- [生存志] 第60节 论语章节概览
- 公网SSH远程树莓派【内网穿透】 1-2
- 孙陶然:不要轻易开始创业