bzoj2342还是马拉车
就好比第一次写主席树的时候写了30行,第二次写了5行
这次马拉车只剩下
1 for(int i=1,id=0,mx=0;i<=n;i++) 2 { 3 for(p[i]=(i<=mx)?min(p[id*2-i],mx-i):0;a[i-p[i]]==a[i+p[i]+1];p[i]++); 4 if(p[i]+i>mx) id=i,mx=i+p[i]; 5 }
(= =缩代码狂魔)
这次不要求奇偶讨论,所以连#都没插,注意在最后统计的时候可以用stl的特殊姿势
1 #include <cstdio> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 int n,u,v,ans,p[500001],q[500001],nex[500001],fir[500001]; 6 char a[500001]; 7 set<int> t; 8 inline int min(int a,int b){return (a<b)?a:b;} 9 inline int max(int a,int b){return (a>b)?a:b;} 10 bool cmp(int a,int b) 11 { 12 return (a-p[a])<(b-p[b]); 13 } 14 int main() 15 { 16 scanf("%d",&n); 17 char ch=getchar(); 18 while(ch<'a' || ch>'z') ch=getchar(); 19 for(int i=1;i<=n;ch=getchar()) 20 a[i++]=ch; 21 for(int i=1,id=0,mx=0;i<=n;i++) 22 { 23 for(p[i]=(i<=mx)?min(p[id*2-i],mx-i):0;a[i-p[i]]==a[i+p[i]+1];p[i]++); 24 if(p[i]+i>mx) id=i,mx=i+p[i]; 25 } 26 for(int i=1;i<=n;i++)q[i]=i; 27 sort(q+1,q+n+1,cmp); 28 int now=1; 29 for(int i=1;i<=n;i++) 30 { 31 while(now<=n&&q[now]-p[q[now]]<=i) 32 { 33 t.insert(q[now]); 34 now++; 35 } 36 set<int>::iterator tmp=t.upper_bound(i+p[i]/2); 37 if(tmp!=t.begin()) 38 { 39 ans=max(ans,(*--tmp-i)*4); 40 } 41 } 42 printf("%d\n",ans); 43 return 0; 44 }
马拉车差不多告一段落(以后肯定还要返工)接下来再做点网络流吧
转载于:https://www.cnblogs.com/wanglichao/p/5806242.html
bzoj2342还是马拉车相关推荐
- P3805 【模板】manacher 算法【马拉车】
快速的求出一个字符串中最长的回文串的长度 https://www.luogu.com.cn/problem/P3805 #include <iostream> #include <c ...
- 1616: 最长回文串(马拉车算法)
1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...
- CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)
题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...
- HDU - 5371 Hotaru's problem(马拉车+暴力)
题目链接:点击查看 题目大意:给出n个数组成的数列,现在规定一种结构满足以下条件: 该结构由三个部分组成 第一个部分与第三个部分相等 第一个部分与第二个部分对称 现在问数列中最长的可以组成该结构的字串 ...
- POJ - 3974 Palindrome(二分+哈希/马拉车)
题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...
- mannachar(马拉车)求最长回文子串
mannachar(马拉车)究竟是什么东西呢? 很简单,就是能让你在O(n)的复杂度内求出一个串的最长回文子串.传统的算法复杂度是O(n^2),呐,为什么mannachar能变快呢?因为mannach ...
- hdu3068马拉车
其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听) 没想到一个简单的优化能变成O(n),感觉碉堡 不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成 ...
- 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...
- Manacher's Algorithm 马拉车算法(最长回文串)
这个马拉车算法Manacher's Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...
最新文章
- PHP mysql数据迁移,【MySQL】迁移数据目录php-php教程
- Python学习笔记.OS学习笔记 OS操作系统(operating system)(三) 日期和时间
- [置顶] 【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统...
- 关于答题抢票活动中奖率低的说明 |程序员光荣日
- java笔记之连接数据库
- P4827 [国家集训队] Crash 的文明世界
- Session-basedRecommendationwithGraphNeuralNetworks(论文笔记)
- 使用ASP.NET Core和Angular 8的服务器端分页
- JavaScript:时间戳(timestamp)与时间(Date)转换
- weui和jquery weui的区别、下载和在项目中的引用、使用、应用
- 英特尔发布酷睿系列 | 历史上的今天
- @Value 读取 map
- 生成模型技术发展过程
- Java8 - Streams flatMap()
- android平台驱动开发(二)--设备属性节点的创建
- android计步器摘要,ios - Healthkit每小时活动摘要包含步数,距离和卡路里? - 堆栈内存溢出...
- 【线性表的原地逆置】
- 零基础编程桌球小游戏
- mysql相关以及优化类面试总结
- 如何在Ubuntu中编译VLC-Android开源项目
热门文章
- 名词解释P2P计算机网络技术,计算机三级网络技术P2P网络知识考点
- 4.1 用格雷戈里公式求π的近似值
- 增强网络口碑营销效果的5个方法
- API 开放接口设计之 appId,appSecret,accessToken (同微信开发平台接口)
- “新华三杯”全国大学生数字技术大赛预选赛备考资料
- Soul网关源码解析(三)代理Dubbo服务
- 中国工程院院士邬江兴:未来网络之憧憬——情景网络
- 推荐给比较好用FF插件
- c语言找出链表中倒数第k的数,查找链表中倒数第k个结点
- FDC2214/2114使用说明及资料分享