题面:[SHOI2011]双倍回文 题解:具体实现时,就是在更新mr时维护前半段是回文串的最长回文串就好了 正确性的话,因为到i时如果i+RL[i]-1<=mr,那么答案肯定在i之前就维护过了: 因此只有在i+RL[i]-1>mr时需要维护答案 由于mr最多被更新N<<1次,所以时间效率是对的:在找前半段最长的回文串时,记得从外向内枚举,一旦发现答案就立即break,否则效率会假 最后,注意只需要判前半段是否满足条件就好了,一是因为我们不清楚后半段相应位置的真实RL值,二是这是个回…
前言 用了一种很奇怪的方法来解,即二分判断回文,再进行某些奇怪的优化.因为这个方法很奇怪,所以希望如果有问题能够 hack 一下. 题解 我们发现,这题中要求的是字符串 \(SS'SS'\),其中 \(S'\) 是 \(S\) 的反向,那么这个串长度必定为 \(4\) 的倍数.那么我们对于每个位置,寻找一组最大的 \(SS'\),然后找这前面是否有一个与他相同的 \(SS'\),如果有,那么这两组字符串组成一个双倍回文.但是问题在于对于某些情况,例如 bbbbbbbbbbb,在第 \(3\) 和…
题目描述 记字符串 w 的倒置为 w^R^ .例如 (abcd)^R^=dcba , (abba)^R^=abba . 对字符串x,如果 x 满足 x^R^=x ,则称之为回文:例如abba是一个回文,而abed不是. 如果x能够写成的 ww^R^ww^R^ 形式,则称它是一个"双倍回文".换句话说,若要 x 是双倍回文,它的长度必须是 \(4\) 的倍数,而且 x , x 的前半部分, x 的后半部分都要是回文.例如 abbaabba 是一个双倍回文,而 abaaba 不是,因为它的…
传送门 听说有大佬用manacher$O(n)$过此题……太强啦…… 说一下PAM的做法吧.(看了题解之后发现)蛮简单的 我们肯定要先建出回文自动机的 然后如果是枚举每一个节点暴跳fail指针肯定得T 那么我们对于每一个节点记录一个$trans[i]$,表示小于等于它长度一半的节点 这个可以在建自动机的时候顺便求出来,具体看代码 然后对每一个节点判断长度是否模4为0且$trans[i]$的长度是它的一半就好了 //minamoto #include<cstdio> #include<cs…
题意 考虑对每个节点\(x\)维护\(lastpos_x\)表示\(x\)的所有后缀回文串中第一个\(len\leqslant len_x/2\)并且能和\(x\)最后一个字符匹配的,之后枚举节点,判断该点回文串是否合法. 求\(lastpos_x\): 如果新建节点\(x\)满足\(len_x\leqslant 2\),那么\(lastpos_x=fail_x\). 不然则从\(x\)的父亲节点向上跳,边跳边判断即可. code: #include<bits/stdc++.h> using…
题面: 洛谷:[SHOI2011]双倍回文‘ 题解: 首先有一个性质,本质不同的回文串最多O(n)个. 所以我们可以对于每个i,求出以这个i为结尾的最长回文串,然后以此作为长串,并判断把这个长串从中间劈开后左边的一半是否也是一个回文串(判断左边那半的中点的回文半径是否可以跨过当前长串的中点). 复杂度O(n) // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; #define R register int…
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 923  Solved: 317[Submit][Status] Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0. Sample Input 16 ggabaa…
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1123  Solved: 408 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=2342 Description 输入分为两行,第一行为一个整数n,表示字符串的长度,第二行有n个连续的小写的英文字符,表示字符串的内容. Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小…
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0. Sample Input 16 ggabaabaabaaball Sample Output 12 HINT N<=50000…
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0. Sample Input 16 ggabaabaabaaball Sample Output 12 HINT N<=5000…