【题目描述】

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

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

现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。

【输入】

第一行为整数K(≤50000),表示字典中的单词个数。

以下K行,是被病毒感染了的字典,每行一个单词。

最后一行是需要你恢复的一串字母。

所有字母均为小写。

【输出】

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

【输入样例】

6
cebdbac
cac
ecd
dca
aba
bac
cedab

【输出样例】

abcde

小记录,不解说,代码:

#include<iostream>
#include<set>
#include<queue>
#include<vector>
#include<string>
using namespace std;
const int maxn = 50005;
set<char> st;
set<char> edg[200];
int in_deg[200] = {};
vector<char> ans;
char mp[200];
string arr[maxn];
bool topo()
{queue<char> q;int n = *st.rbegin() - *st.begin() + 1, start = *st.begin();for (int i = start; i < start + n; i++){if (!in_deg[i])q.push(i);}while (!q.empty()){if (q.size() - 1)return 0;char c = q.front();q.pop();ans.push_back(c);for (auto v : edg[c]){in_deg[v]--;if (!in_deg[v])q.push(v);}}if (ans.size() != n)return 0;for (int i = 0; i < ans.size(); i++){mp[ans[i]] = i + start;}return 1;
}
int main()
{ios_base::sync_with_stdio(false), cin.tie(nullptr);int k;cin >> k;for (int i = 0; i < k; i++){cin >> arr[i];for (auto c : arr[i])st.insert(c);if (i){int j, la = arr[i - 1].length(), lb = arr[i].length();int mi = min(la, lb);for (j = 0; j < mi; j++){if (arr[i][j] != arr[i - 1][j]){int c = arr[i - 1][j], v = arr[i][j];if (edg[c].find(v) == edg[c].end()){edg[c].insert(v);in_deg[v]++;}break;}}if (j == mi && lb < la){cout << 0;return 0;}}}string s;cin >> s;for (auto c : s){if (st.find(c) == st.end()){cout << 0;return 0;}}if (!topo())cout << 0;else{for (auto c : s){cout << mp[c];}}return 0;
}

信奥一本通 1396:病毒(virus)相关推荐

  1. 信奥一本通2071题

    /* [2071题目描述] 已知某班有男同学x位,女同学y位,x位男生平均分是87分,y位女生的平均分是85,问全体同学平均分是多少分? [输入] 男女同学人数. [输出] 平均分(保留4位小数). ...

  2. 信奥一本通-动态规划-例9.2-数字金字塔-方法四-逆推法代码实现

    #include<bits/stdc++.h> using namespace std;int main(){//x y分别为行列int x, y;//金字塔的高度int n;cin &g ...

  3. 信奥一本通1023(大象喝水查)配详解

    [题目描述] 一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数).问大象至少要喝多少桶水才会解渴. [输入] 输入有一行:包行两个整数,以一个空格 ...

  4. 信奥一本通2069(糖果问题)配解析

    某幼儿园里,有5个小朋友编号为1.2.3.4.5,他们按自己的编号顺序围坐在一张圆桌旁.他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏.从1号小朋友开始,将自己的糖果均分三份(如果有多余 ...

  5. 信奥一本通 1394:连接格点(grid)

    [题目描述] 有一个MM行NN列的点阵,相邻两点可以相连.一条纵向的连线花费一个单位,一条横向的连线花费两个单位.某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通. [输入] ...

  6. 2069;【例2.12 】糖果游戏(信奥一本通)

    参考代码: #include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d,e; cin>>a> ...

  7. 信奥一本通1272:【例9.16】分组背包

    [题目描述] 一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,...,Cn. ...

  8. 信奥一本通1386:打击犯罪(black)

    [题目描述] 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里 ...

  9. 详解信奥一本通1290:采药

    1290:采药 [题目描述] 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到个到处都是草药 ...

最新文章

  1. 敏捷开发之道(二)极限编程XP
  2. idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
  3. 【算法题】Multiples of 3 and 5
  4. 关于把类放到结构体中
  5. 南京信息工程大学计算机等级考试代码,南京信息工程大学2016下半年计算机等级考试报名...
  6. Julia : where与类型限定
  7. java 定时器 数据库_java实现定时器,定时修改数据库代码
  8. 模2加法,模2减法,模2除法
  9. MES系统价格具体跟哪些因素相关?
  10. 计算机系统崩溃了怎么办,电脑系统崩溃开不了机怎么办
  11. Vj程序设计复杂模拟题训练
  12. 苹果手机键盘html代码大全,iPhone12键盘使用技巧有哪些
  13. HEVC代码学习6:filterHor和filterVer函数
  14. linux系统数据库服务器配置,Linux安装配置MariaDB数据库全程详解
  15. 蓝桥杯每日一练专栏导读
  16. 推理日本谋杀案的问题
  17. matlab 柱面投影,图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
  18. 【精通特征工程】学习笔记(二)
  19. 前端面试题汇总(五)
  20. 第36课:kaishi 彻底解密Spark 2.1.X中Sort Shuffle中Reducer端源码内幕

热门文章

  1. 思科ASA系列防火墙配置手册
  2. poi解决excel 03 与 07不兼容的问题
  3. AWVS 网页漏洞扫描工具安装使用(Linux)
  4. 【树莓派】树莓派开放WiFi热点
  5. 【2020年第七次人口普查】省市县三级分年龄、性别的人口
  6. 大数据如何简化业务运营
  7. Android Sensor分析
  8. 【海康威视】WPF客户端二次开发:【3】制作WPF/Winform安装包
  9. FTP登录提示Can't open data connection for transfer of /
  10. Mybatis标签的使用(依据官网整理)