1. 程式人生 > >hdu 5510 Bazinga (字串水題)

hdu 5510 Bazinga (字串水題)

題意很簡單:輸入n 然後輸入n個字串,求最大的i, 要求1 ~ i-1 中至少有一個串不是i的子串

思路:直接遍歷就行,兩個for迴圈巢狀(注意,都是自上而下開始),用strstr判斷是不是子串,若是,就打上標記(此串相當於廢棄了,即不需要再判斷),這樣就減少了對strstr的呼叫。針對這道水題的資料來說,這樣做大大減少了時間,讓我們逃出了TLE的泥沼

程式碼:

#include<stdio.h>
#include<string.h>

char ch[501][2002];
int main()
{
    int T;
    scanf("%d",&T);
    int n;
    for(int i=0 ; i<T; i++)
    {
        scanf("%d",&n);

        for(int j=0 ; j<n; j++)
        {
            scanf("%s",ch[j]);

        }
        int idx[501]= {};
        int ans=-1;
        int f=1;
        for(int l=1; l<n; l++)
        {

            for(int k=0 ; k<l; k++)
            {
                if(idx[k])
                    continue;
                if(!strstr(ch[l],ch[k]))
                {
                    ans=l+1;
                }
                else
                {
                    idx[k]=1;
                }
            }
        }
            printf("Case #%d: %d\n",i+1,ans);

    }


    return 0;
}

2018年10月25日,每週 發五篇解題報告的第一篇。