Content

有 \(n\) 次询问,每次询问给定一个字符串 \(s\),求这个字符串最长的回文子串的长度。

数据范围:\(n\) 无解(至少从题面来看是这样的),字符串长度目测应该在 \(10^7\) 范围内。

Solution

这道题目显然会要用到 manacher 算法,关于这个算法的详情可以看 \(\texttt{P3805}\) 的题解 或者这篇博客,这里不再赘述了。

本题相对于 \(\texttt{P3805}\) 而言只是多了一个多组询问而已,其它的本质都是一样的。所以,直接将 \(\texttt{P3805}\) 的代码稍微改一下就可以过这道题目了。

Code

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std; char s[22000007], ss[22000007];
int p[22000007], n, cnt, ans; void pre(char* s) {
int len = strlen(s);
ss[++cnt] = '`', ss[++cnt] = '#';
for(int i = 0; i < len; ++i) {
ss[++cnt] = s[i];
ss[++cnt] = '#';
}
}
void manacher(char* s) {
for(int t = 1, r = 0, mid = 0; t < cnt; ++t) {
if(t <= r) p[t] = min(p[mid * 2 - t], p[mid] + mid - t);
else p[t] = 1;
for(; ss[t + p[t]] == ss[t - p[t]]; p[t]++);
// while(ss[t + p[t]] == ss[t - p[t]]) p[t]++;
if(p[t] + t - 1 > r) r = p[t] + t - 1, mid = t;
}
} int main() {
int n;
scanf("%d", &n);
while(n--) {
memset(p, 0, sizeof(p));
cnt = ans = 0;
scanf("%s", s);
pre(s);
manacher(s);
ans = 0;
for(int i = 0; i < cnt; ++i) ans = max(ans, p[i]);
printf("%d\n", ans - 1);
}
}

最新文章

  1. atexit函数
  2. 一. Linux 常用命令总结
  3. android 自定义用相机拍照后的照片存储位置
  4. Sass学习
  5. [问题解决] VNC连接黑屏或者灰屏+命令行
  6. [C#绘图]在半透明矩形上绘制字符串
  7. for_each的各种情况下的使用详解
  8. 怎么在Windows下安装Linux虚拟机
  9. 在windows下使用cmd命令全速下载百度云文件
  10. 20160216.CCPP体系详解(0026天)
  11. 新浪微博Oauth2.0授权认证及SDK、API的使用(Android)
  12. tangent space与object space
  13. [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类
  14. ROS知识(15)----Actionlib的使用(一)
  15. JSON toBean Timestamp To Date 时间戳转日期
  16. Oracle类型number与PG类型numeric对比和转换策略
  17. Linux系统之路——用CentOS 7打造合适的科研环境
  18. 【Leetcode】【Medium】Gray Code
  19. 【备忘】mysql常用操作汇总
  20. NumPy数组属性

热门文章

  1. Hbuilder/Uniapp 格式化的时候,很多属性会排列在一行,如何结局?
  2. Git的基础入门
  3. PHP非对称加密-RSA
  4. Python基础之数字类型内置方法
  5. Python中pymysql基本使用
  6. Spring整合Mybatis报 java.lang.ClassNotFoundException:org.springframework.core.metrics.ApplicationStartup,即:spring的版本过高,采用RELEASE稳定版
  7. 一起手写吧!ES5和ES6的继承机制!
  8. [php反序列化] CVE-2020-15148(Yii2 反序列化漏洞) 漏洞复现
  9. STM32一些特殊引脚做IO使用的注意事项
  10. Linux基础命令---mysqldump数据库备份