hdu-2328(暴力枚举+kmp)

题意:给你n个字符串,问你这n个串的最长公共子串

解题思路:暴力枚举任意一个字符串的所有子串,然后暴力匹配,和hdu1238差不多的思路吧,这里用string解决的;

代码:

#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
string t;
int main()
{
    int n;
    string a[4050];
    ios::sync_with_stdio(0);
    while((cin>>n)&&n)
    {
        int cot;
        int maxx=0;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        int len=a[1].size();
        for(int i=0;i<len;i++)
        {
            for(int j=1;j<=len-i;j++)
            {
                if(j<maxx)
                    continue;
                cot=0;
                for(int k=2;k<=n;k++)
                {
                    if(a[k].find(a[1].substr(i,j))==string::npos)
                        break;
                    else
                        cot++;
                }
                if(cot==n-1)
                {
                   // cout<<a[1].substr(i,j)<<endl;
                    if(j>maxx)
                    {
                        maxx=j;t=a[1].substr(i,j);
                    }
                    else if(j==maxx)
                    {
                        if(t>a[1].substr(i,j))
                            t=a[1].substr(i,j);
                    }
                }
            }
        }
        if(maxx==0)
            cout<<"IDENTITY LOST";
        else
            cout<<t;
        cout<<endl;
    }
}

  

原文地址:https://www.cnblogs.com/huangdao/p/9495487.html

时间: 2024-10-12 20:41:59

hdu-2328(暴力枚举+kmp)的相关文章

hdu 2328 Corporate Identity(kmp)

Problem Description Beside other services, ACM helps companies to clearly state their “corporate identity”, which includes company logo but also other signs, like trademarks. One of such companies is Internet Building Masters (IBM), which has recentl

hdu 6052(暴力枚举 容斥)

思路来自 http://blog.csdn.net/u014258433/article/details/76223343 我是用滑动窗口实现的. 代码: #include <cstdio> #include <cstring> #include <cmath> #include <iostream> using namespace std; const int maxn = 100; const long long mod = 1000000007; in

hdu5143 暴力枚举

http://acm.hdu.edu.cn/showproblem.php?pid=5143 Problem Description NPY is learning arithmetic progression in his math class. In mathematics, an arithmetic progression (AP) is a sequence of numbers such that the difference between the consecutive term

hdu 5247 找连续数【暴力枚举】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 分析:这道题是2015百度之星初赛1的2题,当时没看这道题 是队友看的,比完以后也做了一下,思路大体都是一样的,就是 暴力枚举,因为k<=1000,那么我们可以每一点x为起点跑[x,x+999] 这段区间,把每得到一段连续的子区间[x,?],则num[len]++(len=size([x,?])); 这样就可以了,最后num数组里就是对应的答案 献上代码: #include<stdio.h&

HDU 4930 Fighting the Landlords(暴力枚举+模拟)

HDU 4930 Fighting the Landlords 题目链接 题意:就是题中那几种牌型,如果先手能一步走完,或者一步让后手无法管上,就赢 思路:先枚举出两个人所有可能的牌型的最大值,然后再去判断即可 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct Player { int rank[15]; } p1, p2; int t, h

hdu_2328_Corporate Identity(暴力枚举子串+KMP)

题目链接:hdu_2328_Corporate Identity 题意: 给你n个串,让你找这n个串的最大公共子串 题解: 串比较小,暴力枚举第一个的子串,然后KMP判断是否可行 1 #include<cstdio> 2 #include<cstring> 3 #define F(i,a,b) for(int i=a;i<=b;i++) 4 5 const int N=210; 6 int nxt[N],n,lens[4001],ans,l,r,cnt; 7 char dt[

hdu 4968 Improving the GPA (水 暴力枚举)

题目链接 题意:给平均成绩和科目数,求可能的最大学分和最小学分. 分析: 枚举一下,可以达到复杂度可以达到10^4,我下面的代码是10^5,可以把最后一个循环撤掉. 刚开始以为枚举档次的话是5^10,但是这个又不要求顺序,所以只是枚举个数就行了.. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath&g

HDU 4081 Qin Shi Huang&#39;s National Road System(最小生成树+暴力枚举边)

题目大意:给你1000个点,每个点上有一个数目代表这个城市有多少人,让你把这N个点构成一颗生成树,你可以删除其中的任意一条边.让你求出一个比例A/B是的这个比例最大,A表示你删除那条边上两个城市的人口数之和,B表示的是去掉这条变这可生成树上其他的边的总长度. 解体思路:先求出来最小生成树,然后暴力枚举生成树的边,B=总数-这条边的长度.A = 将这条连断开之后左右集合中权值最大的两个数的和. 这样保证了B最小的情况下,去找最大的A,所以是可行的解.生成树的同时建边,然后dfs找最大值. PS:这

HDU 5024 Wang Xifeng&#39;s Little Plot(暴力枚举+瞎搞)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5024 Problem Description <Dream of the Red Chamber>(also <The Story of the Stone>) is one of the Four Great Classical Novels of Chinese literature, and it is commonly regarded as the best one. Thi