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);
}
}

LuoguP1723 高手过愚人节 题解的更多相关文章

  1. luogu P1723 高手过愚人节

    打算下周讲课就讲Manacher了 所以百度了一下相关题目,发现了一道千古好题 这道题没想到是一道模板题,模板中的模板 简要说一下思路,我们先复制一遍模板(甚至变量都不用改 然后唯一的区别就是要求的是 ...

  2. 高手过愚人节 Manancher模板题_双倍经验

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  3. 【FZYZOJ】愚人节礼物 题解(状压DP)

    前言:麻麻我会写状压DP了! ---------------------------- 题目描述 愚人节到了!可爱的UOI小朋友要给孩子们送礼物(汗-原题不是可爱的打败图么= =..).在平面直角坐标 ...

  4. 愚人节大狂欢 – ADN DevBlog谎话连篇友谊赛

    愚人节过去了,你被捉弄了没有? :) 借这个机会,ADN的哥们儿也发泄狂欢了一把,我们4月1号当天在ADN DevBlog上发了一堆谎话连篇的blog,没有一个说实话的,哈哈.这是我们team内部进行 ...

  5. 巧用CSS文件愚人节恶搞(转)

    明天就是4月1日愚人节了,也就是那个可适度开玩笑.整蛊的日子了.如果你想和那些要上网的朋友或同事开个极客式玩笑,那就来试试这个国外网友Wes Bos分享的 CSS 文件吧. 一.打开浏览器的 Cust ...

  6. nyoj 1870 愚人节礼物

    愚人节的礼物 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. luogu[愚人节题目3]现代妖怪殖民地 NTT

    U34272 [愚人节题目3]现代妖怪殖民地 fft 题目链接 https://www.luogu.org/problemnew/show/U34272 思路 虽然是个py题. ntt(或者fft)模 ...

  8. 愚人节CDACMFinal

    这个啊,愚人节的ACM之赛,其实还是很有意思的.之前因为星期天不能休息还怨声载道,但真的打起来了就是觉得特别有意思. 我们队,最开始乱搞电脑,cmd都没有办法调用了,霎时间十分慌张(而且我过于慌张忘了 ...

  9. 开源中国愚人节网页变模糊的js blur代码

    <![if !IE]> <script> /* * by moli */ $(document).ready(function(){ if(document.cookie.in ...

随机推荐

  1. 分享一个工具方法:日期格式化 & 日期转化,用法与java类SimpleDateFormat类似

    /** * y 年(201X) * M 年中的月份(1-12) * d 月份中的天数(1-31) * H 一天中的小时数(0-23) * h am/pm 中的小时数(1-12) * m 小时中的分钟数 ...

  2. 关于PHP的==运算符比较规则

    ==是比较运算,它不会去检查比较的具体类型是否相等,只是单纯的根据php内置的转换规则来比较 ===是全等运算,相对来说它的要求更为严格,比较过程不会进行类型转换,从类型到内容都要求相等 ===运算符 ...

  3. C语言下的Led灯

    1. 设计思想 1.1 设置处理器模式 设置sp啥的汇编要先进入SVC模式,超级管理员特权模式,这样就可以访问所有寄存器了,需要用到cpsr寄存器 0到4位要设置svc模式10011 = 0x13, ...

  4. Ubuntu文件权限管理

    1.介绍 第一个是设备文件类型 以c开头的是字符 以b开头的是块存储 ls-l: 读写可执行 rwx | rwx | rwx 这个文件所属的用用户 组内其他成员 其他不属于用户组的成员 2.文件权限修 ...

  5. 一类利用队列优化的DP

    I.导入: 这是一个\(O(n^2)\)的状态和转移方程: \[f(i,j)=\left\{ \begin{aligned} f(i-1,j-1)+k \ (1\leq j)\\ \max_{k \i ...

  6. 如何从vcf文件中批量提取一系列基因的SNP位点?

    目录 需求 示例文件 代码实现 补充说明 需求 客户的一个简单需求: 我有一批功能基因位点,想从重测序的群体材料中找到这些位点,如何批量快速获得? 示例文件 gene.txt test.vcf 代码实 ...

  7. [R] read.table/read.delim读入数据行数变少?

    以为对read.table/read.delim很熟了,谁知又掉坑里了. 我有个3万多行的数据集,包括样品表达量和注释信息.大概长这样: 本来3万多行,可是读进来的时候变成了1万多行,而且read.d ...

  8. 【Pathview web】通路映射可视化

    前言 pathview是一个通路可视化友好的R包,最主要的是它支持多组学数据映射(基因/蛋白-代谢).自己用过它的R包,后来发现有网页版的,果断介绍给学员.因为不常用,记录要点,以后温习备用. 目前w ...

  9. ubuntu常见错误--Could not get lock /var/lib/dpkg/lock

    ubuntu常见错误--Could not get lock /var/lib/dpkg/lock   通过终端安装程序sudo apt-get install xxx时出错:   E: Could ...

  10. Oracle-常用表的查询、增加列、删除列、修改列值功能【增删改查】

    #查看表 select * from `竟企区域数据分析` #在表第一列新增名为"年月"的列alter table `竟企区域数据分析` add column 年月 varchar ...