poj 3080 Blue Jeans,poj3080bluejeans

來源:互聯網
上載者:User

poj 3080 Blue Jeans,poj3080bluejeans

連結:poj 3080

題意:輸入N個DNA序列,每個DNA序列長度都為60。找到這些串的最長共有子序列。

註:若找不到,或最長子序列長度小於2,則輸出no significant commonalities,否則輸出最長公用子串,若長度相同輸出字典序最小的

思路:暴力枚舉第一個DNA序列的每一個子序列,用strstr()函數與其餘的序列進行匹配

strstr(s,t)是在s串中找t串,若找到,返回t串第一次在s中出現的首字元的地址,如果沒有找到,返回NULL


#include<stdio.h>#include<string.h>char t[65],ans[65];void cmp(){    if(strlen(ans)<strlen(t))        strcpy(ans,t);    else if(strlen(ans)==strlen(t))        if(strcmp(ans,t)>0)            strcpy(ans,t);}int main(){    int n,m,i,j,k,a;    char s[12][65];    scanf("%d",&n);    while(n--){        scanf("%d",&m);        for(i=0;i<m;i++)            scanf("%s",s[i]);        ans[0]=0;        for(i=0;i<60;i++){                //子串的起始位置為i            k=0;            for(j=i;j<60;j++){                      t[k++]=s[0][j];        //每次在前一個子串後加上一個字元                t[k]=0;               //記得在子串末尾加上Null 字元                for(a=1;a<m;a++)                 //判斷其餘字串是否包含該子串                    if(strstr(s[a],t)==NULL)                             break;                if(a==m)                    cmp();            }        }        if(strlen(ans)>=3)            printf("%s\n",ans);        else            printf("no significant commonalities\n");    }    return 0;}



POJ3080上的測試資料是對的,但是提交時就是WA,為何?哪個大牛哥給我看看

#include <iostream>
#include <string>
using namespace std;
string a[11];
int n;
void bijiao()
{
int t=1,slen=0,result[11],qsz;
string ans="";
for(int len=60;len>=3;len--)
{
for( qsz=0;qsz<=60-len;qsz++)
{
t=1;
a[10]=a[0].substr(qsz,len);
for(int i=1;i<n;i++)
{
for(int qs=0;qs<=60-len;qs++)
{
result[i]=a[i].compare(qs,len,a[10]);
if(result[i]==0)
{
t++; break;
}

//if(qs==60-len)
//goto loop;
}
if(t==n)
{
slen=len;
break;
}
}
if(t==n)
{
slen=len;
if(ans==""||ans>a[10]) ans = a[10];
continue;
}
}
if(slen)
{
break;
}
}
if(slen>=3)
cout<<ans<<endl;
else
cout<<"no significant commonalities"<<endl;
}
int main()
{
int num;
cin>>num;
while(num--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
bijiao();
}
return 0;
}
 
POJ 3080 題目

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct STR{
char data[62];
int length;
};

STR str[11];

int searchMaxSubString(int n)
{
char subString[62],minLengthString[62];
int ok = 0;
char tempsubString[62]; // 需要一個臨時字串
int sublength,i,j;
strcpy(minLengthString,str[0].data);
sublength=60;
while(sublength>=3) // 長度為3的也算
{
for(i=0;i+sublength<61;i++)
{
strncpy(subString,minLengthString+i,sublength);
subString[sublength]='\0';
for(j=1;j<n;j++)
{
if(strstr(str[j].data,subString)==NULL)
break;
}
if(j==n)
{
//printf("%s\n",subString);
if(!ok || strcmp(subString,tempsubString)<0) // 如果之前沒有搜到或者搜到的比之前小
strcpy(tempsubString,subString); // 記錄新的字串
ok = 1; // 已經搜到的標記
}
}
if(ok) // 如果搜到了
{
printf("%s\n",tempsubString); // 輸出
return 0;
}
sublength--;
}
printf("no significant commonalities\n");
return 0;
}
int main()
{
int times,i,n;
scanf("%d",&times);
while(times--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&str[i].data);
}
searchMaxSubString(n);
}
return 0;
}...餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.