• 2015ACM/ICPC亚洲区沈阳站 B-Bazinga


    Bazinga

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 3509    Accepted Submission(s): 1122


    Problem Description
    Ladies and gentlemen, please sit up straight.
    Don't tilt your head. I'm serious.

    For n given strings S1,S2,,Sn , labelled from 1 to n , you should find the largest i (1in) such that there exists an integer j (1j<i) and Sj is not a substring of Si .

    A substring of a string Si is another string that occurs in Si . For example, ``ruiz" is a substring of ``ruizhang", and ``rzhang" is not a substring of ``ruizhang".
     
    Input
    The first line contains an integer t (1t50) which is the number of test cases.
    For each test case, the first line is the positive integer n (1n500) and in the following n lines list are the strings S1,S2,,Sn .
    All strings are given in lower-case letters and strings are no longer than 2000 letters.
     
    Output
    For each test case, output the largest label you get. If it does not exist, output 1 .
     
    Sample Input
    4 5 ab abc zabc abcd zabcd 4 you lovinyou aboutlovinyou allaboutlovinyou 5 de def abcd abcde abcdef 3 a ba ccc
     
    Sample Output
    Case #1: 4 Case #2: -1 Case #3: 4 Case #4: 3
     
    Source
     
    Recommend
    wange2014   |   We have carefully selected several similar problems for you:  5960 5959 5958 5957 5956 
     
    /*
    用两个指针模拟kmp,暴力
    */
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<queue>
    #include<stack>
    #include<math.h>
    #include<vector>
    #include<map>
    #include<set>
    #include<stdlib.h>
    #include<cmath>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #define N 505
    using namespace std;
    ///4294967295
    int t,n;
    int ne[2005];
    void getnext(char *s2)
    {
        int i=0,j=-1,l=strlen(s2);
        ne[0]=-1;
        while(i<l)
        {
            if(j==-1||s2[i]==s2[j])
            {
                i++;j++;
                if(s2[i]==s2[j])
                    ne[i]=ne[j];
                else
                    ne[i]=j;
            }
            else
                j=ne[j];
        }
    }
    int kmp(char *s,char *s2)
    {
        memset(ne,0,sizeof(ne));
        getnext(s2);
        int i=0,j=0,k=0,len=strlen(s),l=strlen(s2);
        while(i<len)
        {
            if(j==-1||s[i]==s2[j])
                i++,j++;
            else
                j=ne[j];
            if(j==l)
                k++,j=ne[j];
        }
        return k;
    }
    char s[N][2005]={"000"};
    bool vis[N],f;
    int main()
    {
        //freopen("C:\Users\acer\Desktop\in.txt","r",stdin);
        scanf("%d",&t);
        int Case=1;
        while(t--)
        {
            memset(vis,true,sizeof vis);
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
                scanf("%s",s[i]);
            printf("Case #%d: ",Case++);
            for(int i=2;i<=n;i++)
                if(kmp(s[i],s[i-1])>0)
                    vis[i-1]=false;
            int f=0;
            for(int i=n;i>=1&&!f;i--)
                for(int j=1;j<i&&!f;j++)
                    if(vis[j])
                    if(kmp(s[i],s[j])==0)
                    {
                        printf("%d
    ",i);
                        f=true;
                    }
            if(!f)
               puts("-1");
        }
        return 0;
    }
  • 相关阅读:
    VBA的程序终止、退出语句块、分支及错误处理(End, exit, on error go to in VBA
    关于session中的cookie提取
    Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化-转
    tar 解压命令出现如下错误
    操作系统 ----- 段错误(核心转储)
    c++游戏入门基础
    数据结构算法
    point(指针)
    《淘宝网》质量属性简析
    《架构漫谈》读后感
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6025438.html
Copyright © 2020-2023  润新知