病毒是环状,变成线性占用两倍长度
http://www.bjfuacm.com/problem/256/
#include<iostream>
#include<string.h>
#define MAXSIZE 10000
using namespace std;
int Match(char *s,char *t)
{
int n1=strlen(s)/2;
int n2=strlen(t);
//cout<<n1<<endl<<n2<<endl;
for(int i=0,k,l,m,flag;i<n2;i++)
{
for(int j=0;j<n1;j++)
{
k=j;
l=i;
m=k+n1;
flag=1;
while(k!=m)
{
if(s[k]!=t[l])
{
flag=0;
break;
}
k++;
l++;
}
if(flag==1)
return 1;
}
}
return 0;
}
void fun(char *s)
{
int n=strlen(s);
int i=0;
s[2*n]=s[n];
while(i!=n)
{
s[i+n]=s[i];
i++;
}
//s[2*n]='\n';
// cout<<s<<strlen(s)<<endl;
}
void swap(char *s)
{
int n=strlen(s);
for(int i=0;i<n/2;i++)
{
char temp=s[i];
s[i]=s[n-i-1];
s[n-1-i]=temp;
}
//cout<<s<<endl;
}
int main()
{
char s1[MAXSIZE],t[MAXSIZE],s2[MAXSIZE];
while(cin>>s1>>t)
{
if(strcmp(t,"0")==0&&strcmp(s1,"0")==0)
break;
strcpy(s2,s1);
fun(s1);
if(Match(s1,t)==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
病毒感染监测
发布时间: 2017年9月18日 10:06 最后更新: 2017年9月18日 11:52 时间限制: 1000ms 内存限制: 128M
描述
医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为方便研究,研究者将人的DNA和病毒的DNA均表示成由一些小写字母组成的字符串,然后检测某种病毒的DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了病毒,否则没有感染。注意:人的DNA序列是线性的,而病毒的DNA序列是环状的。
输入
多组数据,每组数据有一行,为序列A和B,A对应病毒的DNA序列,B对应人的DNA序列。A和B都为“0”时输入结束。
输出
对于每组数据输出一行,若患者感染了病毒输出“YES”,否则输出“NO”。
样例输入1
abbab abbabaab
baa cacdvcabacsd
abc def
0 0
样例输出1
YES
YES
NO
网友评论