病毒感染监测

2018-12-24  本文已影响0人  点一下我的id

病毒是环状,变成线性占用两倍长度
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

上一篇下一篇

猜你喜欢

热点阅读