hdu 4763 看毛片(单纯next数组的应用--纯正O(n))
因为需要负责队内的字符串题,开始刷,做到这道,开始想不出来,上网找题解,
然后就惊了,为什么你们这么暴力都可以过的啊,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))相关推荐
- KMP算法——俗称看毛片算法
咳咳咳,这是看毛片算法的简单介绍 首推一个博客,这个博客很优秀,我的KMP算法就是从上面学来的--https://www.cnblogs.com/yjiyjige/p/3263858.html 算法思 ...
- 灭霸打个响指的功夫,看懂Verilog多维数组【Verilog高级教程】
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
- hdu 4763 Theme Section(next数组找串中三段相等)
题意:在一个串中找 EAEBE 的形式的最长的E,其中E为一个字符串,也就是说找到前缀与后缀相同,并且串中还存在相同的一段,它们不能重复. 思路:利用next数组,next[len]代表的即是最大的相 ...
- HDU 4763 Theme Section(KMP+枚举公共前后缀)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个 子串E同时出现在前缀.中间.后缀,即EAEBE这种模式 ...
- hdu 5157(manacher+前缀和+树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157 解题思路: 我们可以先用mancher算法对字符串进行处理,把以每个点为中心的回文串半径求出来, ...
- HDU 5617 Jam's maze dp+滚动数组
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5617 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- 下标要求数组或指针类型_算法一看就懂之「 数组与链表 」
数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功.大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多. 其实也不是真的用得少,只不过我们在 ...
- HDU 5517---Triple(二维树状数组)
题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...
- 算法一看就懂之「 数组与链表 」
数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功.大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多. 其实也不是真的用得少,只不过我们在 ...
最新文章
- 了解ES6 The Dope Way Part II:Arrow功能和'this'关键字
- asp.net使用for循环实现Datalist的分列显示功能
- c++ 连续图片显示_计算整数的和并显示结果
- 一文讲透 Git 底层数据结构和原理
- mpvue 调起子组件的方法_什么是锦鲤PH值,PH调整方法有哪些?
- Firefox 下载、附加组件、Flash插件、缓存位置(附加Chrome下载和Opera下载)
- java登录界面命令_Java命令行界面(第3部分):jbock
- promise将ajax变为同步,ES6-Promise改造异步请求为同步
- Hbase error: KeeperErrorCode = NoNode for /hbase/master错误
- 《Pro/ENGINEER野火版5.0从入门到精通》——2.5 设置零件单位
- 2021年电竞营销行业半年度报告
- 《冷眼看IT》读书笔记--IT将成为服务行业
- jquery实现同时展示多个tab标签+左右箭头实现来回滚动
- 201809-1 卖菜
- 电脑模拟收银机_模拟超市收银系统
- 新标准的发布关联的液相色谱-三重四极杆质谱技术的联用
- server port不起作用
- oracle 12 去掉 cdb,Oracle 12c CDB 和PDB 数据库的启动与关闭 说明
- Gtalk怎么样绑定MSN帐号,在Gtalk里面聊MSN的方法
- JS获取ul中li的值同步到搜索框
热门文章
- Vivado 2018.3入门教程(三):生成比特流文件+硬件连接
- 生意惨淡?不妨试试捷径系统智能化健身房系统
- eclipse连接数据库并实现用户注册登录功能
- “双11”后顶级运维和容器盛宴,议题涵盖腾讯移动游戏、京东大促、阿里云Docker、微票儿...
- C++学习(三九四)relocation R_AARCH64_ADR_PREL_PG_HI21 undefined reference to `__dso_handle‘
- android淡入淡出动画循环,Android应用开发之淡入淡出、缩放、旋转、平移、组合动画效果代码实现...
- 纯前端JS实现文件上传解析渲染页面
- 2022-2028年中国异味中和剂行业市场发展规模及投资机会分析报告
- UG NX 12 通过点构造面
- tomcat启动时闪退