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

然后就惊了,为什么你们这么暴力都可以过的啊,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+21;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+50;
char x[maxn];
int nx[maxn];
void init(int m){int i=0,j=nx[0]=-1;while(i<m){while(-1!=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=1;i<=n;++i)mx[i]=0;for(int i=n-1;i;--i){if(nx[i]>0){mx[nx[i]]=max(mx[nx[i]],mx[i]);mx[nx[i]]=max(mx[nx[i]],min(n-i,i/2));}}int ans=0;for(int i=nx[n];i>0;i=nx[i])if(mx[i]>=i)ans=max(ans,i);return ans;
}int main(){
#ifdef localfreopen("in.txt","r",stdin);
#endifios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int T;cin>>T;while(T--)cout<<solve()<<"\n";return 0;
}

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

C是字符串的后缀

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

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

转载于:https://www.cnblogs.com/bibibi/p/9630464.html

hdu 4763 看毛片(单纯next数组的应用--纯正O(n))相关推荐

  1. KMP算法——俗称看毛片算法

    咳咳咳,这是看毛片算法的简单介绍 首推一个博客,这个博客很优秀,我的KMP算法就是从上面学来的--https://www.cnblogs.com/yjiyjige/p/3263858.html 算法思 ...

  2. 灭霸打个响指的功夫,看懂Verilog多维数组【Verilog高级教程】

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

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

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

  4. HDU 4763 Theme Section(KMP+枚举公共前后缀)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个 子串E同时出现在前缀.中间.后缀,即EAEBE这种模式 ...

  5. hdu 5157(manacher+前缀和+树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157 解题思路: 我们可以先用mancher算法对字符串进行处理,把以每个点为中心的回文串半径求出来, ...

  6. HDU 5617 Jam's maze dp+滚动数组

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  7. 下标要求数组或指针类型_算法一看就懂之「 数组与链表 」

    数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功.大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多. 其实也不是真的用得少,只不过我们在 ...

  8. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  9. 算法一看就懂之「 数组与链表 」

    数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功.大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多. 其实也不是真的用得少,只不过我们在 ...

最新文章

  1. 了解ES6 The Dope Way Part II:Arrow功能和'this'关键字
  2. asp.net使用for循环实现Datalist的分列显示功能
  3. c++ 连续图片显示_计算整数的和并显示结果
  4. 一文讲透 Git 底层数据结构和原理
  5. mpvue 调起子组件的方法_什么是锦鲤PH值,PH调整方法有哪些?
  6. Firefox 下载、附加组件、Flash插件、缓存位置(附加Chrome下载和Opera下载)
  7. java登录界面命令_Java命令行界面(第3部分):jbock
  8. promise将ajax变为同步,ES6-Promise改造异步请求为同步
  9. Hbase error: KeeperErrorCode = NoNode for /hbase/master错误
  10. 《Pro/ENGINEER野火版5.0从入门到精通》——2.5 设置零件单位
  11. 2021年电竞营销行业半年度报告
  12. 《冷眼看IT》读书笔记--IT将成为服务行业
  13. jquery实现同时展示多个tab标签+左右箭头实现来回滚动
  14. 201809-1 卖菜
  15. 电脑模拟收银机_模拟超市收银系统
  16. 新标准的发布关联的液相色谱-三重四极杆质谱技术的联用
  17. server port不起作用
  18. oracle 12 去掉 cdb,Oracle 12c CDB 和PDB 数据库的启动与关闭 说明
  19. Gtalk怎么样绑定MSN帐号,在Gtalk里面聊MSN的方法
  20. JS获取ul中li的值同步到搜索框

热门文章

  1. Vivado 2018.3入门教程(三):生成比特流文件+硬件连接
  2. 生意惨淡?不妨试试捷径系统智能化健身房系统
  3. eclipse连接数据库并实现用户注册登录功能
  4. “双11”后顶级运维和容器盛宴,议题涵盖腾讯移动游戏、京东大促、阿里云Docker、微票儿...
  5. C++学习(三九四)relocation R_AARCH64_ADR_PREL_PG_HI21 undefined reference to `__dso_handle‘
  6. android淡入淡出动画循环,Android应用开发之淡入淡出、缩放、旋转、平移、组合动画效果代码实现...
  7. 纯前端JS实现文件上传解析渲染页面
  8. 2022-2028年中国异味中和剂行业市场发展规模及投资机会分析报告
  9. UG NX 12 通过点构造面
  10. tomcat启动时闪退