1396:病毒(virus)
【题目描述】
有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。
【输入】
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。
【输出】
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。
【输入样例】
6 cebdbac cac ecd dca aba bac cedab
【输出样例】
abcde
代码:
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#define MAXN 50005
using namespace std;int n , cnt ;
int in[MAXN] , ans[MAXN] ;
bool flag ;
char have[MAXN] ;
string s[MAXN] , g ;
vector <int> G[MAXN] ;
map <char , int > T ;void Topol() {int count = 0 ;int k = 0 ;queue <int> q ;for( int i = 1 ; i <= cnt ; ++ i )if( !in[i] ) {k ++ ;q.push(i) ;}if( k != 1 ) {//拓扑序唯一flag = 1 ;return ;}while( !q.empty() ) {int sum = 0 ;int x = q.front() ;q.pop() ;count ++ ;ans[x] = count ;for( int i = 0 ; i < G[x].size() ; ++ i ) {int s = G[x][i] ;in[s] -- ;if( !in[s] ) {q.push(s); sum ++ ;}}if( sum > 1 ) {//保证拓扑序唯一flag = 1 ;return ;}}if( count != cnt )//拓扑跑完了的flag = 1 ;return ;
}int main() {scanf("%d", &n );for( int i = 1 ; i <= n ; ++i )cin >> s[i] ;cin >> g ;for( int i = 2 ; i <= n ; ++ i ) {for( int j = 0 ; j < min( s[i].length() , s[i-1].length() ) ; ++j ) {if( !T[s[i][j]] ) {//map存储cnt ++ ;T[s[i][j]] = cnt ;have[cnt] = s[i][j] ;//记录出现了的字母}if( !T[s[i-1][j]] ) {cnt ++ ;T[s[i-1][j]] = cnt ;have[cnt] = s[i-1][j] ;}if( s[i-1][j] != s[i][j] ) {//连边int a = T[s[i-1][j]] ;int b = T[s[i][j]] ;G[a].push_back(b) ;in[b] ++ ; break ;}}}Topol();if( flag ) {printf("0");return 0;}sort( have+1 , have+cnt+1 );//排序for( int i = 0 ; i < g.length() ; ++ i ) {//是否有没出现的字母int now = T[g[i]];if( now == 0 ) {printf("0");return 0;}}for( int i = 0 ; i < g.length() ; ++ i ) {//找正确的字母int now = T[g[i]];int rig = ans[now] ;printf("%c", have[rig] );}
}
1396:病毒(virus)相关推荐
- 病毒 (virus)
病毒 (virus) 题目描述 题目描述 有一天,小y 突然发现自己的计算机感染了一种病毒! 还好,小y 发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母 ...
- 信奥一本通 1396:病毒(virus)
[题目描述] 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y ...
- 拓扑排序 病毒virus
[问题描述] 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y ...
- linux 病毒virus(text 逆向、PLT\GOT HOOK)
免责声明: 源码仅供学习,非法使用与作者无关!!! 源码仅供学习,非法使用与作者无关!!! 源码仅供学习,非法使用与作者无关!!! 随机感染目录下所有 elf 文件: char *dirs[4] = ...
- 病毒virus - 拓扑排序
题目描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪 ...
- 病毒virus(拓扑排序)
~目录啊~ 题目 思路 Code 题目 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. ...
- C++解题报告:病毒(virus)——拓扑排序
题目描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪 ...
- 手机 html病毒,virus.html.url 这个是误报?还是病毒木马?求大神解答
那是误报,我把文件提交到在线查毒网站,结果如下: VirSCAN.org Scanned Report : Scanned time : 2015-01-18 22:36:30 Scanner r ...
- 病毒(virus) 题解 - 拓扑排序
题目 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母. 现在怎么恢复原来的文档呢!小y很聪明, ...
最新文章
- C++_STL——queue(and priority_queue)
- 算力网络 — 技术架构
- linux下weblogic版本,Linux下weblogic10.3.6(jar)版本安装详解
- 问题 1046: [编程入门]自定义函数之数字后移
- mysql表名怎么拼接_mysql必知必会(一)
- c语言存为pdf,c语言10年保存(免费).pdf
- 用keil编译的时候遇到不能编译也不能build
- android mmkv使用_锦囊篇|一文摸懂SharedPreferences和MMKV(一)
- 模拟电子技术基础(第四版)教材 电子版
- 将R Markdown文档变成互动体验
- 免费下载天地图全国基础地理信息矢量数据的一种方法
- 中公计算机岗位知识与技能,知识与技能的分类
- Dell台式计算机BIOS放电,戴尔bios设置电池修复 笔记本电脑电池bios设置图解方法...
- 移动硬盘在Mac上无法拷贝或删除文件的解决办法
- gateway跨域问题解决方法
- 流程图中省略的图表怎么表示_如何将流程图和图表添加到Google文档或幻灯片
- DFS和BFS求字符串的所有非空子集———Java
- 1.oracle RAC11G 对单机ADG搭建详细文档
- Nextchip系列芯片资料收集----RX/ISP/AHD使用场景
- 襄阳市2011年6月高一数学统考解答