`

hdu 5510 Bazinga 思路详解 kmp +思维

    博客分类:
  • acm
 
阅读更多
来一发代码,先前后两两比较,如果前一个串是后一个串的字串,那他就是没必要的,假设第i个串是i+1的子串,如果在后面循环比较中,如果第i+1个串是后面串的子串,那i个串就没有比的必要了,如果第i+1不是后面串的子串,直接结束循环,查找结束,得出结果


#include <bits/stdc++.h>
int next[10005];
int T;
char s[505][2005];
bool v[550],flag;
void getnext(char str[],int len)
{
    int k=0;
    next[1]=0;
    for(int i=2;i<=len;i++)
    {
        while(k>0&&str[k+1]!=str[i])
            k=next[k];
        if(str[k+1]==str[i])
            k++;
        next[i]=k;
    }
}

int match(char P[],int lenp,char T[],int lent)
{
    int res=0;
    getnext(P,lenp);
    int k=0;
    for(int i=1;i<=lent;i++)
    {
        while(k>0&&P[k+1]!=T[i])
            k=next[k];
        if(P[k+1]==T[i])
            k++;
        if(k==lenp){
            res++;
            k=next[k];//这儿修改很重要,不然会超时
            return 1;
        }
    }
    return 0;
}
int main()
{
    scanf("%d",&T);
    int n;
    for(int cs = 1;cs<=T;cs++)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
           scanf("%s",s[i]+1);
        memset(v,true,sizeof(v));
        int sum = 0;
        for(int i=2;i<=n;i++)
        {
            int lent=strlen(s[i]+1);
            int lenp=strlen(s[i-1]+1);
            if(match(s[i-1],lenp,s[i],lent))
                v[i-1]=false;
        }
        printf("Case #%d: ",cs);
        flag = false;
        for(int i=n;i>=1&&!flag;i--)
        {
            for(int j=i-1;j>=1&&!flag;j--)
            {
                if(v[j])
                {
                    int lenw=strlen(s[j]+1);
                    int lent=strlen(s[i]+1);
                    int ans=match(s[j],lenw,s[i],lent);
                    if(ans==0)
                    {
                        printf("%d\n",i);
                        flag = true;
                        break;
                    }
                }

            }
        }
        if(!flag) printf("-1\n");
    }
    //system("pause");
    return 0;
}
分享到:
评论

相关推荐

    hdu 1695 GCD(欧拉函数+容斥原理).docx

    "hdu 1695 GCD(欧拉函数+容斥原理)" 题目大意是:给定 a, b, c, d, k,找到一队 x, y,满足 g(x, y) = k,且 x ∈ [1, b], y ∈ [1, d],问有多少对符合要求的 (x, y)。 思路是:gcd(x, y) == k 解释 x, y 都能...

    HDU ACM as easy as a+b

    - **HDU** 指的是“杭州电子科技大学”(Hangzhou Dianzi University),这所大学在ACM国际大学生程序设计竞赛中有着优异的表现。 - **ACM** 是指“Association for Computing Machinery”,即计算机协会,而在此处...

    HDU+2000-2099+解题报告

    这个压缩包文件“HDU 2000-2099 解题报告”显然包含了在这个题号范围内的一些问题、答案以及解题思路,对于学习算法和提升编程能力具有很高的价值。 在这个范围内,我们可以预见到涵盖的算法类型可能包括但不限于:...

    HDU+2000-2099+解题报告.zip

    《杭电OnlineJudge 2000-2099解题报告》是针对杭州电子科技大学(HDU)在线评测系统(OnlineJudge)中2000至2099题目的详细解答集锦,主要涵盖了算法分析、编程技巧以及问题解决策略等内容。这份解题报告以CHM...

    hdu 3341(ac自动机+状态压缩)

    hdu 3341(ac自动机+状态压缩) 题意:容易理解... 思路:首先一开始容易想到要用到dp,开设一个dp[41][41][41][41][501]的数组来解决,但是明显内存已经超出范围了,于是就想如何减少内存呢?只要知道A、T、C、G其中...

    【HDU 3993】田忌赛马 题解+勘误

    【田忌赛马】是一道源自古代中国历史的著名策略问题,被转化为计算机科学中的算法题目,出现在HDU(杭州电子科技大学在线评测系统)的3993号问题中。该题目的主要目的是通过编程来解决如何在不确定的对手策略下,...

    zyq2652192993zyq#Advance-Algorithm#HDU-1711 Number Sequence(KMP算

    HDU-1711 Number Sequence(KMP算法)For each test case, you should output one line wh

    hdu oj poj 题目代码与详解

    【题目代码与详解】是针对在线编程竞赛平台HDU(杭州电子科技大学在线评测系统)和POJ(普林斯顿大学在线判题系统)中的经典题目所编写的解决方案和解析的集合。这些平台是程序员和计算机科学学生提升算法技能、熟悉...

    HDU刷题地图+精选详细笔记

    本人准备2020年保研机试时刷的题目(虽然最后机试取消了,...来自某中流985,在HDU和vjudge平台上大概刷了400道。本文件地图(excel表格)包含了绝大部分我刷过的题目,笔记中具有思路、代码、总结和心得。 大佬勿入!

    HDU 1022 Train Problem I 附详细思路

    HDU 1022 Train Problem I 附详细思路

    HDU 递归题详解大全(含代码)

    蟠桃记 1 折线分割平面 2 不容易系列之一 2 骨牌铺方格 3 不容易系列之(3)—— LELE的RPG难题 3 Children’s Queue 3 献给杭电五十周年校庆的礼物 3 钥匙计数之二 3 钥匙计数之一 3 母牛的故事 3 ...

    hdu 300+ AC 代码

    HDU 300+ AC 代码集合是一个包含超过300个已通过验证的算法解决方案的资源,这些代码主要用于解决各类计算机编程竞赛中的问题。这些竞赛通常由杭州电子科技大学(HDU)主办,旨在提升参赛者的算法设计、编程和问题...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    ACM hdu 线段树题目+源代码

    ACM hdu 线段树题目+源代码 线段树是一种非常重要的数据结构,它广泛应用于算法竞赛和实际编程中。今天,我们将通过 ACM hdu 的几个题目来学习和掌握线段树的基本概念和应用。 线段树的基本概念 线段树是一种...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    ACM HDU

    【标签】"ACM题解 HDU"意味着这是一个关于如何解答HDU ACM题目的资源,可能包含了解题思路、算法解析、代码实现等方面的内容。这样的资料对于准备ACM比赛的选手或者希望提升算法能力的程序员来说非常有价值。 在...

    hdu-acm源代码(上百道源代码)

    对于这些源代码,readme.txt可能是作者对解题思路、算法详解或者代码实现的简单介绍,对于初学者来说,阅读这份文档可以帮助理解代码的核心思想和应用场景。 "zscas060102"、"yfndq2"、"flymaidou" 等文件名可能...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

Global site tag (gtag.js) - Google Analytics