水题笔记: virus [拓扑排序]
来源:互联网 发布:linux 内核驱动开发 编辑:程序博客网 时间:2024/05/05 03:21
扯一扯
中午在机房做的…没回宿舍感觉真爽…(我们宿舍没空调啊mmp!!!)
懵逼的 题目
病毒
[问题描述]
有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。
[输入格式]
virus.in
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。
[输出格式]
virus.out
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。
[输入样例]
6
cebdbac
cac
ecd
dca
aba
bac
cedab
[输出样例]
abcde
扯淡的 题解
不会装影子系统嘛不会装影子系统嘛不会装影子系统嘛(划掉)
请忽略那些难看的字体QAQ
大体就是这个意思…以大小关系建图,然后走一遍拓扑排序,得到的就是字母表…emm…然后…翻译就吼辣~
再次安利onenote(逃)
沙茶的 代码
// virus.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#include <string>#include <queue>#define MAXS (50000 + 5)#define MAXN (26 + 5)#define min(a, b) ((a) < (b) ? (a) : (b))using namespace std;bool g[MAXN][MAXN];int du[MAXN];bool failed = false;string srs[MAXS];string passw;int keyword[MAXN];int sn;void inp();void inint();void tp();inline int zh(const char x){ return x - 'a' + 1;}int main(){ inp(); /*for (int i = 1; i <= sn; i++) { cout << srs[i] << endl; } cout << passw << endl;*/ tp(); if (failed) { puts("0"); return 0; } int n = passw.length(); for (int i = 0; i < n; i++) { cout << (char)(keyword[(int)passw[i] - 'a' + 1] + 'a' - 1); } return 0;}void inp(){ cin >> sn; for (int i = 1; i <= sn; i++) { cin >> srs[i]; } cin >> passw;}void inint(){ for (int i = 1; i < sn; i++) { for (int j = i + 1; j <= sn; j++) { int dqn = min((srs[i].length()), (srs[j].length())); for (int k = 0; k < dqn; k++) { if (srs[i][k] != srs[j][k]) { if (! g[zh(srs[i][k])][zh(srs[j][k])]) { g[zh(srs[i][k])][zh(srs[j][k])] = true; du[zh(srs[j][k])]++; } break; } } } }}void tp(){ int n = 26; //queue<int> q; for (int i = 1; i <= n; i++) { int k = 0; for (int j = 1; j <= n; j++) { if (!du[j]) { //if (!k) { k = j; } /*else { failed = true; return; }*/ } } for (int j = 1; j <= n; j++) { if (g[k][j]) { g[k][j] = false; du[j]--; } } keyword[i] = k; }}/*6cebdbaccacecddcaababaccedab*/
By 脑子有问题的 Cansult
阅读全文
0 0
- 水题笔记: virus [拓扑排序]
- 拓扑排序 病毒virus
- 拓扑排序笔记♂
- 关于拓扑排序的笔记
- 拓扑排序学习笔记-Java
- POJ-1128 拓扑排序水题
- 拓扑排序的一道水题
- 拓扑排序题集
- 拓扑排序题集
- 拓扑排序题集
- 拓扑排序简单题
- 拓扑排序题集
- 【训练题】拓扑排序
- 数据结构学习笔记 --- 图(拓扑排序)
- |算法讨论|拓扑排序 学习笔记
- 算法笔记_023-拓扑排序(Java)
- 算法笔记_023-拓扑排序(Java)
- 算法笔记_023-拓扑排序(Java)
- BalalaPower个人解题心得
- hive on tez详细配置和运行测试
- 运维发展分析
- 使用ChatterBotCorpusTrainer时ubuntu_dialogs.tgz应该存放的路径
- footer 始终位于页面的底部
- 水题笔记: virus [拓扑排序]
- word小技巧
- Codeforces#257 (Div. 2) B. Jzzhu and Sequences (数学
- 安全框架shiro
- arttemplate的简单使用并且使用if简洁语法
- android基础-Toast提示框、日历视图(CalendarView)组件、日期、时间选择器DatePicker和TimerPicker等
- 寻找字符串中最长单词,并输出!
- POJ 3974 Palindrome【manacher】【模板题】【模板】
- vue 实现点击图片放大