因为需要负责队内的字符串题,开始刷,做到这道,开始想不出来,上网找题解,

然后就惊了,为什么你们这么暴力都可以过的啊,1e6啊,后来又想了下会做了

贴下代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
#include <algorithm>
#define mst(a,b) memset(a,b,sizeof(a))
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int mod=1e9+;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+;
char x[maxn];
int nx[maxn];
void init(int m){
int i=,j=nx[]=-;
while(i<m){
while(-!=j and x[i]!=x[j])j=nx[j];
nx[++i]=++j;
}
}
int mx[maxn];
int solve(){
cin>>x;
int n=strlen(x);
init(n);
for(int i=;i<=n;++i)
mx[i]=;
for(int i=n-;i;--i){
if(nx[i]>){
mx[nx[i]]=max(mx[nx[i]],mx[i]);
mx[nx[i]]=max(mx[nx[i]],min(n-i,i/));
}
}
int ans=;
for(int i=nx[n];i>;i=nx[i])
if(mx[i]>=i)ans=max(ans,i);
return ans;
} int main(){
#ifdef local
freopen("in.txt","r",stdin);
#endif
ios::sync_with_stdio(false);
cin.tie(); cout.tie();
int T;cin>>T;
while(T--)
cout<<solve()<<"\n";
return ;
}

假设E在字符串中的三次匹配为A B C,那么A必在B和C的fail链中

C是字符串的后缀

枚举B的结束位置为x,那么A在B的fail链中出现,那么B可接受的A的长度<= min( n-x,x/2)

然后一直往nx推,最后从n的fail链上找符合的,就是答案了

hdu 4763 看毛片(单纯next数组的应用--纯正O(n))的更多相关文章

  1. kmp//呵呵!看毛片算法

    以前刚学的时候迷迷糊糊的,一看就懵圈,前几天捡起来的时候 发现还不会 于是研究了两天,自尊心严重受挫,今天的时候  突然一道灵光迸发,居然 感觉好像懂了,于是又琢磨起来  终于  我懂了  呵呵!   ...

  2. KMP算法再解 (看毛片算法真是人如其名,哦不,法如其名。)

    KMP算法主要解决字符串匹配问题,其中失配数组next很关键: 看毛片算法真是人如其名,哦不,法如其名. 看了这篇博客,转载过来看一波: 原博客地址:https://blog.csdn.net/sta ...

  3. SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解

    数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  4. 快速字符串匹配一: 看毛片算法(KMP)

    前言 由于需要做一个快速匹配敏感关键词的服务,为了提供一个高效,准确,低能耗的关键词匹配服务,我进行了漫长的探索.这里把过程记录成系列博客,供大家参考. 在一开始,接收到快速敏感词匹配时,我就想到了 ...

  5. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  6. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  7. (KMP灵活运用 利用Next数组 )Theme Section -- hdu -- 4763

    http://acm.hdu.edu.cn/showproblem.php?pid=4763 Theme Section Time Limit: 2000/1000 MS (Java/Others)  ...

  8. HDU - 4763 Theme Section (KMP的next数组的应用)

    给定一个字符串,求出一个前缀A,使得字符串的构成可以表示成ABABA的形式(B可以为空串). 输出这个前缀的最大长度. KMP算法Next数组的使用. 枚举中间的每个位置,可以根据Next数组求出这个 ...

  9. hdu 4763 Theme Section(next数组找串中三段相等)

    题意:在一个串中找 EAEBE 的形式的最长的E,其中E为一个字符串,也就是说找到前缀与后缀相同,并且串中还存在相同的一段,它们不能重复. 思路:利用next数组,next[len]代表的即是最大的相 ...

随机推荐

  1. CSS3彩色进度条加载动画 带进度百分比

    在线演示       本地下载

  2. vim /etc/security/limits.conf中的hard和soft

    转自:https://blog.csdn.net/zxljsbk/article/details/89153690 "soft" 和 "hard" 的区别sof ...

  3. java -cp 执行jar包里的某个类

    当我们需要测试某个功能时,需要在linux环境下执行某个类的main方法来测试 可以使用java -cp xxx.jar com.MyClass来执行某个类 java -cp test.jar:lib ...

  4. C++ 二阶构造模式

    1.如何判断构造函数的执行结果? 构造函数没有返回值,所以不能通过返回值来判断是构造函数是否构造成功. 如果给构造函数强行加入一个返回值,用来表示是否构造成功.这样确实能够反映出构造的结果,但是不够优 ...

  5. WPF中Matrix介绍

    最近在做一些图形变换操作的功能,图形变换涉及大学中的矩阵运算部分的知识,又重新复习了一下矩阵.这里做一下记录.由于不知道矩阵如何输入,一个个截图又麻烦,所以这里就全部用截图了^-^.

  6. 面向对象-this关键字的内存图解

    /* 标准的代码改进版 this:哪个对象调用那个方法,this就代表那个对象 */ class Student { private String name; private int age; pub ...

  7. 【From StackOverFlow】--set-upstream 和--set-upstream-to=以及--track的区别

    本文引自StackOverFlow http://stackoverflow.com/questions/26090689/git-set-upstream-to-vr-track

  8. React 长列表修改时避免全体渲染

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <script ...

  9. linux命令详解——vim

    显示行号:命令模式下set nu 定位到指定行: 命令模式下,:n   比如想到第2行,:2 编辑模式下,ngg  比如想到第5行 5gg(或者5G) 打开文件定位到指定行   vim  +n  te ...

  10. logging:不喜欢写日志可不好哦

    logging模块简介 logging模块是python内置的标准模块,主要用于输出程序的运行日志. 可以设置输出日志的等级,日志保存路径,日志文件回滚等等. logging模块的基本使用 impor ...