就好比第一次写主席树的时候写了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还是马拉车相关推荐

  1. P3805 【模板】manacher 算法【马拉车】

    快速的求出一个字符串中最长的回文串的长度 https://www.luogu.com.cn/problem/P3805 #include <iostream> #include <c ...

  2. 1616: 最长回文串(马拉车算法)

    1616: 最长回文串 Time Limit: 1 Sec Memory Limit: 128 MB [Submit][Status][Web Board] Description 求一个字符串的最长 ...

  3. CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...

  4. HDU - 5371 Hotaru's problem(马拉车+暴力)

    题目链接:点击查看 题目大意:给出n个数组成的数列,现在规定一种结构满足以下条件: 该结构由三个部分组成 第一个部分与第三个部分相等 第一个部分与第二个部分对称 现在问数列中最长的可以组成该结构的字串 ...

  5. POJ - 3974 Palindrome(二分+哈希/马拉车)

    题目链接:点击查看 题目大意:给出一个字符串,求字符串中最长的回文子串,这个字串可以包含主串本身 题目分析:这个题就是之前徐州网络赛的那个回文题目的弱化版..那个题目正解是要用回文自动机,但我不会,当 ...

  6. mannachar(马拉车)求最长回文子串

    mannachar(马拉车)究竟是什么东西呢? 很简单,就是能让你在O(n)的复杂度内求出一个串的最长回文子串.传统的算法复杂度是O(n^2),呐,为什么mannachar能变快呢?因为mannach ...

  7. hdu3068马拉车

    其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听) 没想到一个简单的优化能变成O(n),感觉碉堡 不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成 ...

  8. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)

    马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...

  9. Manacher's Algorithm 马拉车算法(最长回文串)

    这个马拉车算法Manacher's Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...

最新文章

  1. PHP mysql数据迁移,【MySQL】迁移数据目录php-php教程
  2. Python学习笔记.OS学习笔记 OS操作系统(operating system)(三) 日期和时间
  3. [置顶]       【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统...
  4. 关于答题抢票活动中奖率低的说明 |程序员光荣日
  5. java笔记之连接数据库
  6. P4827 [国家集训队] Crash 的文明世界
  7. Session-basedRecommendationwithGraphNeuralNetworks(论文笔记)
  8. 使用ASP.NET Core和Angular 8的服务器端分页
  9. JavaScript:时间戳(timestamp)与时间(Date)转换
  10. weui和jquery weui的区别、下载和在项目中的引用、使用、应用
  11. 英特尔发布酷睿系列 | 历史上的今天
  12. @Value 读取 map
  13. 生成模型技术发展过程
  14. Java8 - Streams flatMap()
  15. android平台驱动开发(二)--设备属性节点的创建
  16. android计步器摘要,ios - Healthkit每小时活动摘要包含步数,距离和卡路里? - 堆栈内存溢出...
  17. 【线性表的原地逆置】
  18. 零基础编程桌球小游戏
  19. mysql相关以及优化类面试总结
  20. 如何在Ubuntu中编译VLC-Android开源项目

热门文章

  1. 名词解释P2P计算机网络技术,计算机三级网络技术P2P网络知识考点
  2. 4.1 用格雷戈里公式求π的近似值
  3. 增强网络口碑营销效果的5个方法
  4. API 开放接口设计之 appId,appSecret,accessToken (同微信开发平台接口)
  5. “新华三杯”全国大学生数字技术大赛预选赛备考资料
  6. Soul网关源码解析(三)代理Dubbo服务
  7. 中国工程院院士邬江兴:未来网络之憧憬——情景网络
  8. 推荐给比较好用FF插件
  9. c语言找出链表中倒数第k的数,查找链表中倒数第k个结点
  10. FDC2214/2114使用说明及资料分享