链接:https://www.luogu.org/problemnew/show/P3805

思路:模板,直接上马拉车

代码:

 1 //#include<bits/stdc++.h>
 2 #include<iostream>
 3 #include<vector>
 4 #include<stack>
 5 #include<string>
 6 #include<cstdio>
 7 #include<algorithm>
 8 #include<queue>
 9 #include<map>
10 #include<set>
11 #include<cmath>
12 #define inf 0x3f3f3f3f
13 using namespace std;
14 typedef long long ll;
15 const ll M = ll(1e7) * 3 + 5;
16 string s;
17 string s2;
18 ll len[M];
19 string init(string s)
20 {
21     s2.clear();
22     s2 += '@';
23     for (ll i = 0; i < s.size(); i++)
24     {
25         s2 += '#';
26         s2 += s[i];
27     }
28     //s2 += s[s.size() - 1];
29     s2 += '#';
30 //    s2 += '$';
31 //    s2 += '\0';
32     return s2;
33 }
34 ll Manacher(string s)
35 {
36     ll p0 = 0, mx = 0, ans = 0;
37     for (ll i = 1; i < s.size(); i++)
38     {
39         if (i < mx)
40             len[i] = min(mx - i, len[2 * p0 - i]);
41         else
42             len[i] = 1;
43         while (s[i - len[i]] == s[i + len[i]])
44             len[i]++;
45         if (i + len[i] > mx)
46         {
47             mx = len[i] + i;
48             p0 = i;
49         }
50         ans = max(ans, len[i]);
51     }
52     return ans - 1;
53 }
54 int main()
55 {
56     while (cin >> s)
57     {
58         s = init(s);
59         //cout << s << endl;
60         cout << Manacher(s) << endl;
61     }
62     return 0;
63 }

备注:在初始化原串的时候要注意还需要再加一个不同的字符,我这里用的是@,防止马拉车的时候上溢,详情可见这篇博客

转载于:https://www.cnblogs.com/harutomimori/p/10660935.html

洛谷 P3805 manacher算法相关推荐

  1. 洛谷题单 算法1-3 暴力枚举

    1 First Step (ファーストステップ) 题目背景 知らないことばかりなにもかもが(どうしたらいいの?) 一切的一切 尽是充满了未知数(该如何是好) それでも期待で足が軽いよ(ジャンプだ!) ...

  2. 洛谷P2312 秦九韶算法求多项式点值

    题意: 给出序列[a1,a2,a3,...,an][a_{1},a_{2},a_{3},...,a_{n}][a1​,a2​,a3​,...,an​],求出下列方程在区间[1,m][1,m][1,m] ...

  3. 洛谷题单 算法1-1 模拟和高精度

    1 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华就是其中 ...

  4. 洛谷题单 算法2-1 前缀和与差分

    前缀和是一种重要的预处理,能大大降低查询的时间复杂度,而差分则是一种和前缀和相对的策略. 海底高铁 题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元, ...

  5. 【洛谷题单算法1-1】P1042\P2670\P1563\P1601

    P1042 [NOIP2003 普及组] 乒乓球 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 分制和 21 分制下,双方的比赛结果(截至记录末尾). 比 ...

  6. 字符串-Manacher算法(你知道马拉车算法吗?)

    文章目录 原理 奇偶问题 p[]数组 马拉车求p[] 模板 例题 P3805 [模板]manacher算法 P1659 拉拉队排练 原理 马拉车算法当然不是马拉着车的奇奇怪怪的东西,是Manacher ...

  7. 洛谷专题训练 ——【算法1-1】模拟与高精度

    洛谷题单[算法1-1]模拟与高精度 ACM-ICPC在线模板 题单链接: [算法1-1]模拟与高精度 下面的这一坨都是洛谷题单上的东东 题单简介 恭喜大家完成了第一部分语言入门,相信大家已经可以使用 ...

  8. P3805 【模版】manacher算法(manacher)

    P3805 [模版]manacher算法 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a ...

  9. 【c++算法刷题笔记】——洛谷2

    1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...

最新文章

  1. 设置VSCode快速切换多个项目窗口的快捷键Alt+E
  2. css新闻列表优化-突破思维新方法更利于搜索引擎
  3. hdu 4148 Length of S(n) (坑爹的规律题)
  4. 一文读懂全系列树莓派!
  5. AI in RTC 创新挑战赛,决赛打响
  6. 按揭买的房,房产证为什么要放在银行,自己要用房产证怎么办?
  7. 个人作业——福大微信公众号使用评测
  8. [vue] 你知道vue的模板语法用的是哪个web模板引擎的吗?说说你对这模板引擎的理解
  9. 查看mysql的安装信息
  10. Exchange 2010与Exchange Online混合部署PART 1:添加域名
  11. 2021-02-13
  12. 配置idea开发go编程语言并配置导入本地包
  13. php聊天室把数据存在缓存里,php聊天室信息存储的问题
  14. 彻底删除BootCamp Windows分区和合并到Mac分区中教程
  15. 动态桌面软件测试简历,动态壁纸软件横评
  16. 计算机的分区原理,电脑真的需要分区吗?别被“常识”骗了
  17. 如何编写jnlp文件
  18. Python-随机生成20位数字
  19. abs传感器电压有几伏电_汽车ABS传感器的正常电阻值一般为多少呢 还有没有其它检测方法呢 还有它的信号线怎么检测 一般...
  20. 英语四六级及考研语法(学习方法)

热门文章

  1. struts2常见报错
  2. 负载均衡沙龙活动第二期现场问答汇集
  3. ROS系统 参数的获取和设置
  4. Java 数组去掉小于60的项
  5. Flask发送邮件,最基础
  6. Adobe Flash Professional cc2015中文版
  7. 【多线程】ThreadPoolExecutor 类的使用详解
  8. Manjaro 安装笔记
  9. C# Http方式下载文件到本地类改进版
  10. Atitit.数据操作dsl 的设计 ---linq 方案