病毒

Posted pigAlg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了病毒相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

#define N 50005

int k;
char ch[N][100];
char a[N];
int mp[N][100],in[N],out[N];
char ans[N];
int cnt;
queue<int> q;

inline int read()

	int x=0;
	bool f=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar())
		if(ch==\'-\')
			f=0;
	for(;isdigit(ch);ch=getchar())
		x=(x<<1)+(x<<3)+ch-\'0\';
	return f?x:(~(x-1));


int main()

	k=read();
	for(int i=1;i<=26;i++)
		in[i]=-1;
	for(int i=1;i<=k;i++)
	
		scanf("%s",ch[i]);
	
	scanf("%s",a);
	for(int i=0;i<strlen(a);i++)
	
		in[a[i]-\'a\'+1]=0;
	
	for(int i=1;i<k;i++)
	
		int x=i+1;
		int len=min(strlen(ch[i]),strlen(ch[x]));
//		cout<<i<<" vs "<<x<<endl;
		for(int j=0;j<len;j++)
		
			if(ch[i][j]==ch[x][j])continue;
			int o=ch[i][j]-\'a\'+1,p=ch[x][j]-\'a\'+1;
//			cout<<o<<" "<<p<<endl;
			in[p]++;
			out[o]++;
			mp[o][out[o]]=p;
			break;
		
	
//	cout<<endl;
	for(int i=1;i<=26;i++)
	
//		cout<<i<<" "<<in[i]<<endl;
		if(in[i]==0)
		
			q.push(i);
//			cout<<(char)(i+\'a\'-1)<<endl;
			cnt++;
			ans[cnt]=i+\'a\'-1;
		
	
	if(cnt!=1)
	
		cout<<0;
		return 0;
	
	while(!q.empty())
	
		int k=q.front();
		q.pop();
		for(int i=1;i<=out[k];i++)
		
			int t=mp[k][i];
			in[t]--;
			if(in[t]==0)
			
				q.push(t);
				cnt++;
				ans[cnt]=t+\'a\'-1;
			
		
	
//	for(int i=1;i<=cnt;i++)
//	
//		cout<<ans[i];
//	
//	cout<<cnt;
//	if(cnt==k)
//	cout<<"error"<<endl;
		for(int i=0;i<strlen(a);i++)
		
			for(int j=1;j<=cnt;j++)
			
				if(a[i]==ans[j])
				
					cout<<(char)(j+\'a\'-1);
					break;
			 	
					
			
			
		
//	
	return 0;

以上是关于病毒的主要内容,如果未能解决你的问题,请参考以下文章

中勒索病毒后如何清除-电脑中勒索病毒后加密文件恢复方法

exe木马病毒是啥?

中勒索病毒后如何清除

丁型肝炎病毒必须利用乙型肝炎病毒的()才能完成复制周期。

中了勒索病毒能恢复吗

防病毒程序如何检测 EICAR 测试病毒?