HDU 5311 Hidden String

來源:互聯網
上載者:User

標籤:

我的方法是將題目中給的那個串(anniversary)拆分成三段。枚舉所有情況,也就100多種的樣子。

每一種情況去判斷在輸入的串中能不能找到這三個串,並且不相交。

o(︶︿︶)o 唉,思路很快就有了,代碼寫得醜,找錯找了半天,最終在場外Submit的1A了。

寫題時候腦癱,還搞了個KMP上去。。。其實長度為100的串,暴力和KMP差距並不是很大,似乎都能 0ms AC。

按照自己的思路來能過這題,已經很滿足了。。。

 

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;char s[1000];char y[100]="anniversary";char one[100],two[100],three[100];char R[1000];const int N = 1000002;int Next[N];char S[N], T[N];int slen, tlen;int tot;int flag;int lenZ;void getNext(){    int j, k;    j = 0; k = -1; Next[0] = -1;    while(j < tlen)        if(k == -1 || T[j] == T[k])            Next[++j] = ++k;        else            k = Next[k];}int KMP_Index(){    int i = 0, j = 0;    getNext();    while(i < slen && j < tlen)    {        if(j == -1 || S[i] == T[j])        {            i++; j++;        }        else            j = Next[j];    }    if(j == tlen)        return i - tlen;    else        return -1;}int main(){    int TT;    int i,j,k;    scanf("%d",&TT);    while(TT--)    {        scanf("%s",s);        strcpy(R,s);        lenZ=strlen(s);        flag=0;        int i,j;        for(i=1;i<=10;i++)        {            for(j=i;j<=9;j++)            {                strcpy(s,R);                int u=0;                for(k=0;k<=i-1;k++) one[u]=y[k],u++;                one[u]=‘\0‘;                u=0;                for(k=i;k<=j;k++) two[u]=y[k],u++;                two[u]=‘\0‘;                u=0;                for(k=j+1;k<11;k++) three[u]=y[k],u++;                three[u]=‘\0‘;                u=0;                //printf("%s %s %s\n",one,two,three);                if(i==1&&j==2)                {                    strcpy(one,"anniv");                    strcpy(two,"ers");                    strcpy(three,"ary");                }                int lenone=strlen(one);                int lentwo=strlen(two);                int lenthree=strlen(three);                strcpy(S,s);                strcpy(T,one);                slen = strlen(S);                tlen = strlen(T);                int oneshou=KMP_Index();                int ii;                if(oneshou!=-1)                {                    S[0]=0;                    tot=0;                    lenZ=strlen(s);                    for(ii=oneshou+lenone;ii<lenZ;ii++)                        S[tot]=s[ii],tot++;                    S[tot]=‘\0‘;                    strcpy(T,two);                    slen = strlen(S);                    tlen = strlen(T);                    int twoshou=KMP_Index();                    if(twoshou!=-1)                    {                        strcpy(s,S);                        lenZ=strlen(S);                        tot=0;                        S[0]=0;                        for(ii=twoshou+lentwo;ii<lenZ;ii++)                            S[tot]=s[ii],tot++;                        S[tot]=‘\0‘;                        strcpy(T,three);                        slen = strlen(S);                        tlen = strlen(T);                        if(KMP_Index()!=-1)                            flag=1;                    }                }                if(flag) break;            }            if(flag) break;        }        if(flag) printf("YES\n");        else printf("NO\n");    }    return 0;}

 

HDU 5311 Hidden String

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.