[HDU 5510][2015ACM/ICPC 亚洲区沈阳站] Bazinga KMP+剪支

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Bazinga
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1597 Accepted Submission(s): 499

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

A substring of a string Si is another string that occurs in Si. For example, ruiz" is a substring ofruizhang”, and rzhang" is not a substring ofruizhang”.

Input
The first line contains an integer t (1≤t≤50) which is the number of test cases.
For each test case, the first line is the positive integer n (1≤n≤500) 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
2015ACM/ICPC亚洲区沈阳站-重现赛

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5510

题意
一些字符串,问下标最大的字符串使得下标小于它的字符串中存在一个字符串不是它的子串(连续)

思路
n^2+kmp肯定超时,剪支可吧被匹配上的串删掉,保证后面的能匹配上的(无所谓),!kmp的没被删去;满足条件的break掉搜下面串即可;

if(kmp(i,j))   vis[j]=1;
else    flag=1ans=ibreak;                 

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char s[502][2002];
int flag;
int vis[502];
int ans;
int nex[502][2002];
void pre(char ss[],int id)
{
    int j=-1;
    for(int i=0;ss[i];i++)
    {
        while(ss[i]!=ss[j+1]&&j!=-1)
        {
            j=nex[id][j];
        }
        if(ss[i]==ss[j+1]&&i!=0) j++;
        nex[id][i]=j;
    }
}
bool kmp(int x,int y)
{
    int j=-1;
    for(int i=0;s[x][i];i++)
    {
        while(s[x][i]!=s[y][j+1]&&j!=-1) j=nex[y][j];
        if(s[x][i]==s[y][j+1]) j++;
        if(j==strlen(s[y])-1) return 1;
    }
    return 0;
}
int T,n;
int main()
{
    scanf("%d",&T);
    int cnt=0;
    while(T--)
    {
        cnt++;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {

            scanf("%s",s[i]);
            pre(s[i],i);
            vis[i]=0;
        }
        flag=0;
        for(int i=2;i<=n;i++)
        {
            for(int j=i-1;j>=1;j--)
            if(!vis[j])
            {
                if(kmp(i,j))
                {

                    vis[j]=1;
                }
                else 
                {
                    flag=1;
                    ans=i;
                    break;
                }
            }
        }
        printf("Case #%d: ",cnt);
        if(flag)
        printf("%d\n",ans);
        else printf("-1\n");

    }


}
FP5510A VCM AF变焦驱动 摄像头自动变焦音圈马达驱动芯片FP5510A 手册,常用于智能手机中 立即下载

相关推荐

TLC5510接口电路及程序设计

它在每一个CLK(时钟)周期都启动一次采样,完成一次采样;每次启动采样是在CLK的下降沿进行,不过采样转换结果的输出却在2.5CLK周期后,如果计算上输出延时td(D),从采样到输出需经2.5*CLK+ td(D)。对于需要设计的采样控制器,可以认为,每加一个采样CLK周期,A/D就输出一个采样数据

经典算法研究系列:六、教你初步了解KMP算法、updated

教你初步了解KMP算法 作者:July、saturnma、上善若水。 时间;二零一一年一月一日 ----------------------- 本文参考:数据结构(c语言版) 李云清等编著、算法导论 引言: 在文本编辑中,我们经常要在一段文本中某个特定的位置找出 某个特定的字符或模式。 由此,便产生了字符串的匹配问题。 本文由简单的字符串匹配算法...

dinongxu8804的博客 904

TLC5510A/D转换器中文资料

TLC5510A/D转换器的特性,概述,时序,功能图等

国外高手参加世界编程大赛时的参赛作品

此程序是国外高手参加世界编程大赛时的参赛作品,获一等奖。 请在dos窗口下打debug,进入后把横线下的内容复制、粘贴到-后面,回车就可以见到了。 ------------------------------------------- e100 33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1 e11b

jsjwql专栏 2267

KMP 各种类型总结】

KMP 各种类型总结 以下是几种KMP类型题: A.类型1:匹配子字符串在母串中第几个位置开始出现。 B.类型2:子串在母串中出现了几次(可以有重叠的)。 eg:子串:AZA 母串:AZAZAZA ans = 3; C.类型3:母串中最多有几个子串(不可以有重叠的)。 eg:母串:aaaaa 子串:aa ans=2, 最多2个 D.类型4:求最小循环节有几个。 eg: aabaabaabaab 最小循环节:aab 循环:4次 E.类型5:当前最小循环节中字符串的个数(不可以补字符串

ZhgDgE的博客 5660

M - Period(KMP/EXKMP

Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 ≤ i ≤ N) we want to know the largest K> 1

qq_45830025的博客 651

KMP算法思路拆分

  KMP算法是一种字符串匹配算法,这里字符串匹配是指:“字符串P是否为字符串S的子串(后面统一用P表示模式串,S表示主串),如果是,它出现在S的哪个位置(起始位置)”,KMP算法可以在O(n+m)的时间里实现这样的匹配。接下来我会以通俗易懂的方式,一步一步讲解这个算法的思路。......

Xiangyun233的博客 669

[HDU 5512][2015ACM/ICPC亚洲区沈阳站] Pagodas 博弈论

Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 506 Accepted Submission(s): 375Problem Description n pagodas were standing erect i

ATOD 791

HDU 5510 Bazinga(KMP)——2015ACM/ICPC亚洲区沈阳站

HDU 5510 Bazinga(KMP)——2015ACM/ICPC亚洲区沈阳站

queuelovestack的专栏 3140

HDU 5510 Bazinga 字符串HASH (2015ACM/ICPC亚洲区沈阳站)

【题目链接】:click here~~ 【题目大意】: Bazinga Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 39    Accepted Submission(s): 15 Problem Des

herongwei 的 BLOG 1540

hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站-重现赛

攒了一堆题目木有写题解嘤,后天就比赛了求人品> #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //hdu 5510 const int maxn=510; const int maxz

TimeForMiracles 866

hdu 5510 Bazinga 2015ACM/ICPC亚洲区沈阳站现场赛

做的重现赛。 主要思路:如果A是B的子串,且B是C的子串,显然有A是C的子串,所以没有必要去两个都判断。预处理一下相邻串之间的关系就可以过了,和去重的思路非常像。 如果只单纯判断是否为子串,strstr效率比KMP高。 #include #include using namespace std; char in[512][2005]; int n; int ski

Pekary 794

acm竞赛KMP算法

本人写的kmp算法模板,能够给新手直接套模板减少写代码的时间,希望对大家有帮助

hdu 5510】【2015ACM/ICPC亚洲区沈阳站-重现赛 】Bazinga 题意&题解&代码(C++)

kmp 暴力

曾经追梦的happy时光 2万+

hdu5510Bazinga+KMP

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

xtulollipop 465

HDU5510BazingaKMP

BazingaTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3716 Accepted Submission(s): 1207 Problem Description Ladies and gentlemen, please sit

LuRiCheng的博客 567

HDU 5510 Bazinga (2015沈阳现场赛,子串判断)

Bazinga Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 214Accepted Submission(s): 89 Problem Description Ladies and gentlemen, plea...

dituonian8372的博客 103

HDU 5510 Bazinga(模拟双向链表或kmp或AC自动机)

Bazinga(传送门)Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other) Total Submission(s) : 42 Accepted Submission(s) : 19Problem DescriptionLadies and gentlemen, please sit u

qq_18661257的专栏 698

HDU 5510 Bazinga

Bazinga Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 101Accepted Submission(s): 41 Problem Description Ladies and gentlemen, plea...

weixin_30852451的博客 138
上一篇: [poj 3140] Contestants Division  树形DP
下一篇: [HDU 5512][2015ACM/ICPC亚洲区沈阳站] Pagodas 博弈论
ALPS233
博客等级 码龄11年 25粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值