【DG特长生2019】文档恢复

ABC教授的计算机遭受了ALPHABETVIRUS病毒攻击,导致文档中字母被替换。病毒未改变单词顺序,利用字典的有序性,可以通过比较病毒后字典和原始单词找出替换规律,恢复文档。输入为病毒感染后的字典和待恢复字母组,输出恢复后的字符串。解题思路涉及对比不同字母和拓扑排序。
摘要由CSDN通过智能技术生成

题目大意

ABC教授是XYOI的负责人,有一天他竟然发现自己的计算机染上了一种不常见的病毒这种病毒的名字叫做ALPHABETVIRUS,当它发作的时候,它会将字母用其它的字母代替,但它不会将单词的顺序交换。
病毒将计算机中的所有文档都作了相对应的改变,很幸运,ABC教授的计算机上有一个字典,而我们都知识字典单词是按字母顺序排列的,当然,这个字典也被病毒改变了。因此,要利用字典原来的有序性,找到病毒替换字母的规律,再用以恢复其它文档。由于XYOI是不可缺少ABC的文件的,所以文档必须恢复。但是由于ABC教授有其它的更重要工作要完成,所以他希望你可以帮助他恢复文档,使得XYOI的工作可以继续。
ABC教授会提供感染病毒后的字典和他希望帮助恢复的字母组。

-输入

4 5
ab
abc
cb
bb
bk
bcak

-输出

cbak
(注意别输出成了cbad)


对比俩个字符串的第一个不同位,就可以得到一对字母间的关系。
然后类似拓扑排序的思想,确定字母的大小顺序。
如果有两个字母确定不了之间的大小关系…就属于无解。


代码

(写得很乱我都忘了我当时怎么写的了)

#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;
int ru[30], ss[30][30], a, k, len[5], ans[30], tot, In[30], in, cl, chuxian[30];
queue<int> Q;
char s[5][1000001];
void db(int aa, int bb){
   
	int la = len[aa];
	int lb = len[bb];
	for(int i = 0; i < la && i < lb; ++i){
   
		int<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值