病毒 x
04:病毒
- 总时间限制:
- 1000ms
- 内存限制:
- 65535kB
- 描述
-
有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加和删除字母。
现在怎么恢复原来的文档呢!小y很聪明,他在其他没有感染病毒的机器上,生成了一个由若干单词构成的字典,字典中的单词是按照字母顺序排列的,他把这个文件拷贝到自己的机器里,故意让它感染上病毒,他想利用这个字典文件原来的有序性,找到病毒替换字母的规律,再用来恢复其它文档。
现在你的任务是:告诉你被病毒感染了的字典,要你恢复一个字母串。
- 输入
- virus.in
第一行为整数K(≤50000),表示字典中的单词个数。
以下K行,是被病毒感染了的字典,每行一个单词。
最后一行是需要你恢复的一串字母。
所有字母均为小写。 - 输出
- virus.out
输出仅一行,为恢复后的一串字母。当然也有可能出现字典不完整、甚至字典是错的情况,这时请输出一个0。 - 样例输入
-
6
cebdbac
cac
ecd
dca
aba
bac
cedab - 样例输出
-
abcde
#include <iostream>
using namespace std; #include <cstdio>
#include <cstdlib>
#include <cmath> int qm[],sd[],dy[];// qm记录入度
string s[];
int next[],back[],last[];//邻接表元素
bool yt[][];// 判断字母应该出现的顺序
int tot,cmax;
bool cx[]; void add_edge(int a,int b)
{
tot++;
next[tot]=b;// b 必须要在 a 之后才能出现
back[tot]=last[a];// 指针指向下一条边
last[a]=tot;// 相当于head指针
} void dfs(int x,int t)// t表示字母个数
{
if (t>sd[x]) sd[x]=t; //sd表示与x相关的字母数量
int i=last[x];
while (i!=)// 枚举与x+96相关的所有字母
{
int v=next[i];
if (sd[v]<=t) dfs(v,t+);
i=back[i];
}
} void error()
{
cout<<"";
exit ();// 强制退出程序 相当于return 0(不过要比return 0凶一点嘻嘻);
} int main()
{
int k;
cin>>k;
for (int i=; i<=k; i++)
getline(cin,s[i]);
for (int i=; i<=k; i++)// 因为判断是把当前字符串与上一个字符串进行比较
{
int l1=s[i-].size();
int l2=s[i].size();
for (int j=; j<=min(l1,l2)-; j++) //比较到较短的长度
{
int t1=s[i-][j]-;
int t2=s[i][j]-;
cmax=max(t1,max(t2,cmax));// 找到所有输入的最大值
if (t1==t2) continue;
if (yt[t2][t1]) error();//t1必须在t2之前
qm[t2]++;// 入度 拓扑排序
yt[t1][t2]=true;
add_edge(t1,t2);
break;
// 如果找到t1<t2的元素直接退出 因为字典序只比较第一个不相同的元素
}
}
for (int i=; i<=cmax; i++)
{
if (qm[i]==) //如果他的入度为0
dfs(i,);
}//统计与所有字母相关的字母的数量
string que,ans="";
getline(cin,que);// 输入待处理的字符串
for (int i=; i<=que.size()-; i++)
{
if (cx[sd[que[i]-]]) error();
cx[sd[que[i]-]]=true; //进行判重
if (sd[que[i]-]==) error();//如果没有找到可以匹配的元素
ans=ans+(char (sd[que[i]-]+));
}
cout<<ans;
return ;
}
没太看懂
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<cstdlib>
#include<cmath> const int MAXN=;
using namespace std; string a[MAXN];
int maxnlength; struct node
{
int u;
int v;
int w;
int next;
}edge[MAXN]; int rudu[MAXN];
int head[MAXN];
int num=;
int ans[];//保存拓扑排序的结果
int now=;
int n;
int maxnchar=;
int map[][]; void topsort()
{
stack<int>s;
for(int i=;i<=maxnchar;i++)
{
if(rudu[i]==)
{
s.push(i);
ans[now]=i;
now++;
}
}
int flag=;
while(s.size()==)
{
if(s.size()>)
{
flag=;
break;
}
int p=s.top();
s.pop();
for(int i=head[p];i!=-;i=edge[i].next)
{
rudu[edge[i].v]--;
if(rudu[edge[i].v]==)
{
s.push(edge[i].v);
ans[now]=edge[i].v;
now++;
}
}
}
if(flag==)
{
printf("0\n");
exit();
}
} int main()
{ scanf("%d",&n);
for(int i=;i<=n;i++)head[i]=-;
for(int i=;i<=n;i++)
{
cin>>a[i];
if(a[i].length()>maxnlength)
maxnlength=a[i].length();
for(int j=;j<=a[i].length();j++)
{
if(a[i][j]->maxnchar)
maxnchar=a[i][j]-;
}
}
int flag2=;
for(int i=;i<=n;i++)
{
int j=i-;
for(int k=;k<=min(a[i].length()-,a[j].length()-);k++)
{
if(a[j][k]!=a[i][k])
{
if(map[a[j][k]-][a[i][k]-]==||map[a[i][k]-][a[j][k]-]==)
{
printf("0\n");
return ;
}
edge[num].u=a[j][k]-;
edge[num].v=a[i][k]-;
edge[num].next=head[edge[num].u];
head[edge[num].u]=num++;
rudu[a[i][k]-]++;
flag2=;
map[a[j][k]-][a[i][k]-]=;
break;
}
}
//if(flag2==1)break;
}
topsort();
char sr[];
char huiche[];
gets(huiche);
gets(sr);
int l=strlen(sr);
//int srl=sr.length();
for(int i=;i<=l;i++)
{
if(sr[i]->maxnchar)
{
printf("0\n");
return ;
}
}
for(int i=;i<=l;i++)
{
for(int j=;j<=now-;j++)
{
if(ans[j]==sr[i]-)
{
printf("%c",char(j+));
}
}
}
return ;
}
病毒 x的更多相关文章
- android手机登录时遇到“QQ安全登录发现病毒”解决
android手机作为开源系统非常容易感染病毒,有时候我们会经常遇到手机QQ登录时检测到app被感染,一般情况是由手机感染病毒所引起的,安装腾讯管家后只能检测病毒和卸载感染病毒的软件,不能清除病毒.解 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史
自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为"最高人民检察院"的应用.经过反编译逆向分析以及长期的跟踪调查 ...
- 当攻击者熟读兵法,Camouflage病毒实战演示暗度陈仓之计
"明修栈道,暗度陈仓"的典故许多人都听说过,该典故出自楚汉争霸时期,刘邦意图进入关中,需要攻下关中咽喉之地--陈仓.韩信献出一计:表面上浩浩荡荡地修复通往陈仓的栈道以迷惑陈仓守将, ...
- Trick蠕虫病毒来袭!幕后主使竟是一名高中生“黑客”!
黑客一直是美国电影中的重要元素,很多经典大片中都有黑客的身影,如战争游戏.黑客帝国等.电影中黑客总是神通广大.行侠仗义,<战争游戏>中的年轻黑客大卫•莱特曼利用黑客技术避免引爆核武器,&l ...
- 安天AVL联合小米MIUI首擒顽固病毒“不死鸟”
不死鸟作为希腊神话中的一种怪物,拥有不断再生的能力,每当寿限将至时,它会在巢穴中自焚,并在三天后重新复活.就在近期,安天AVL移动安全团队和小米MIUI安全中心发现了病毒界的“不死鸟”,其顽固程度之深 ...
- 【HDU2896】病毒侵袭 AC自动机
[HDU2896]病毒侵袭 Problem Description 当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年 ...
- 你的应用是如何被替换的,App劫持病毒剖析
一.App劫持病毒介绍 App劫持是指执行流程被重定向,又可分为Activity劫持.安装劫持.流量劫持.函数执行劫持等.本文将对近期利用Acticity劫持和安装劫持的病毒进行分析. 二.Activ ...
- 谷歌chrome浏览器www.tradeadexchange.com广告弹窗跳转劫持病毒
近期大量网友出现chrome浏览器被劫持的情况,表现如下: · 点击(访问)任意网站任意链接均有概率弹出www.tradeadexchange.com. · ...
随机推荐
- flaskurl传参用法
from flask import Flask,request app = Flask(__name__) @app.route("/") def index(): return ...
- c++嵌入linux指令以查找文件夹
char buf[256]={0}; char cmd[64] ={0}; FILE *fp=NULL; snprintf(cmd,sizeof(cmd),"ls %s",&quo ...
- 查看主机CPU信息
一.关于CPU的几个概念 CPU的作用 计算机中的中央处理单元(CPU)执行基本的计算工作 -- 运行程序.但是,一个单核的CPU同一时间只能一次执行一个任务,为了提高计算机的处理能力,也就出现了多C ...
- 超详细的CentOS8Linux新功能介绍 镜像iso下载安装
在这文章中,我们会使用图解的方式演示 CentOS 8 的安装方法. CentOS8中软件和系统管理请参照https://www.cnblogs.com/fusheng11711/p/11809963 ...
- HDU 1171 Big Event in HDU (动态规划、01背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- http请求跨域问题分析
http请求跨域问题分析 个人认为可能涉及很多http的知识,本人才疏学浅不敢妄自揣测,只是做个笔记为了以后对比理解,从原生fetch说起吧,前提假设有个后端服务,我用express来模拟,如下: v ...
- Quatrz + Spring
实例工程结构: 配置: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- C# System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflectio ...
- php前端做过滤校验
http://www./test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E 以上的 URL 中,将被解析为如下代码并执行: < ...
- SpringMVC基础01——SpringMVC的知识结构体系
1.前言 目前在各大互联网公司使用最热门的技术莫过于SpringBoot以及在其基础之上的SpringCloud,然而学习这些技术的基础在于学好Spring和SpringMVC,准确来说SpringM ...