信奥一本通 1396:病毒(virus)
【题目描述】
有一天,小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)相关推荐
- 信奥一本通2071题
/* [2071题目描述] 已知某班有男同学x位,女同学y位,x位男生平均分是87分,y位女生的平均分是85,问全体同学平均分是多少分? [输入] 男女同学人数. [输出] 平均分(保留4位小数). ...
- 信奥一本通-动态规划-例9.2-数字金字塔-方法四-逆推法代码实现
#include<bits/stdc++.h> using namespace std;int main(){//x y分别为行列int x, y;//金字塔的高度int n;cin &g ...
- 信奥一本通1023(大象喝水查)配详解
[题目描述] 一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数).问大象至少要喝多少桶水才会解渴. [输入] 输入有一行:包行两个整数,以一个空格 ...
- 信奥一本通2069(糖果问题)配解析
某幼儿园里,有5个小朋友编号为1.2.3.4.5,他们按自己的编号顺序围坐在一张圆桌旁.他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏.从1号小朋友开始,将自己的糖果均分三份(如果有多余 ...
- 信奥一本通 1394:连接格点(grid)
[题目描述] 有一个MM行NN列的点阵,相邻两点可以相连.一条纵向的连线花费一个单位,一条横向的连线花费两个单位.某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通. [输入] ...
- 2069;【例2.12 】糖果游戏(信奥一本通)
参考代码: #include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d,e; cin>>a> ...
- 信奥一本通1272:【例9.16】分组背包
[题目描述] 一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,...,Cn. ...
- 信奥一本通1386:打击犯罪(black)
[题目描述] 某个地区有n(n<=1000)个犯罪团伙,当地警方按照他们的危险程度由高到低给他们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里 ...
- 详解信奥一本通1290:采药
1290:采药 [题目描述] 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到个到处都是草药 ...
最新文章
- 敏捷开发之道(二)极限编程XP
- idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
- 【算法题】Multiples of 3 and 5
- 关于把类放到结构体中
- 南京信息工程大学计算机等级考试代码,南京信息工程大学2016下半年计算机等级考试报名...
- Julia : where与类型限定
- java 定时器 数据库_java实现定时器,定时修改数据库代码
- 模2加法,模2减法,模2除法
- MES系统价格具体跟哪些因素相关?
- 计算机系统崩溃了怎么办,电脑系统崩溃开不了机怎么办
- Vj程序设计复杂模拟题训练
- 苹果手机键盘html代码大全,iPhone12键盘使用技巧有哪些
- HEVC代码学习6:filterHor和filterVer函数
- linux系统数据库服务器配置,Linux安装配置MariaDB数据库全程详解
- 蓝桥杯每日一练专栏导读
- 推理日本谋杀案的问题
- matlab 柱面投影,图像拼接(不投影到柱面)(渐入渐出融合) matlab程序
- 【精通特征工程】学习笔记(二)
- 前端面试题汇总(五)
- 第36课:kaishi 彻底解密Spark 2.1.X中Sort Shuffle中Reducer端源码内幕