HDU 5510 Bazinga (字符串匹配)

题目:传送门

题意:组数据,每组 个串,对于第 个串如果存在 到 i-1 中的某个串不是 的子串,那么这个第 个串符合题意,求 的最大值。

题解:KMP,AC自动机也可以,直接匹配就行。注意如果串 jj+1的子串,那么对于j+2来说只需要匹配j+1是不是他的子串即可,因为比匹配 j 更容易符合题意。用cin会超时,要用scanf。

 

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
char s[510][2050];
int main()
{
    int t,cas=1;
    scanf("%d",&t);
    while(t--)
    {
        memset(s,0,sizeof(s));
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%s",s[i]);
        int ans=-1,j=1;
        for(int i=2;i<=n;i++)
        {
            while(j<i&&strstr(s[i],s[j]))
                j++;
            if(j<i)
                ans=i;
        }
        printf("Case #%d: %d\n",cas++,ans);
    }
    return 0;
}

 

posted @ 2016-08-05 19:30  Ritchie丶  阅读(134)  评论(0编辑  收藏  举报