首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
】的更多相关文章
BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
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 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小…
BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] 我们发现要找到这样一个双倍回文,我们可以采取在大的回文串中寻找小的回文串的方式, 在回文串i中找到回文串j满足j+r[j]>=i那么(i-j)<<1就可以用来更新答案. 在查找过程中,我们发现在下标小的i中无法被用到的j在下标大的i中也无法被用到, 因此对于无效的查找区间我们用并查集进行优…
2018.06.30 BZOJ 2342: [Shoi2011]双倍回文(manacher)
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0. Sample Input 16 ggabaabaabaaball Sample Output 12 HINT N<=50000…
bzoj 2342: [Shoi2011]双倍回文 -- manacher
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文子串不存在,则输出0. Sample Input 16 ggabaabaabaaball Sample Output 12 HINT N<=5000…
Manacher || BZOJ 2342: [Shoi2011]双倍回文 || Luogu P4287 [SHOI2011]双倍回文
题面:[SHOI2011]双倍回文 题解:具体实现时,就是在更新mr时维护前半段是回文串的最长回文串就好了 正确性的话,因为到i时如果i+RL[i]-1<=mr,那么答案肯定在i之前就维护过了: 因此只有在i+RL[i]-1>mr时需要维护答案 由于mr最多被更新N<<1次,所以时间效率是对的:在找前半段最长的回文串时,记得从外向内枚举,一旦发现答案就立即break,否则效率会假 最后,注意只需要判前半段是否满足条件就好了,一是因为我们不清楚后半段相应位置的真实RL值,二是这是个回…
BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)
题目大意:略 先建出$PAM$ 因为双倍回文串一定是4的倍数,所以找出$PAM$里所有$dep$能整除4的节点 看这个串是否存在一个回文后缀,长度恰好为它的一半,沿着$pre$链往上跳就行了 暴跳可能会$T$,所以倍增了跳 如果被卡空间,可以把trs数组当成倍增数组 #include <cmath> #include <vector> #include <cstdio> #include <cstring> #include <algorithm>…
BZOJ 2342 [Shoi2011]双倍回文(Manacher)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2342 题意:求最长子串使得它有四个相同的回文串SSSS相连组成. 首先跑一边Manacher,初始化出以每一个点为最长回文串的左端点,然后按左端点排序. 枚举中间点$x$,然后找右面的中间点$y$,使得$y$满足 $y-p_y\leq x$ $y\leq x+r_x\div 2$ 用set维护y,然后求出最接近$x+r_x\div 2$,用--upper_bound()返回$y$的迭代…
BZOJ 2342: [Shoi2011]双倍回文 [Manacher + set]
题意: 求最长子串使得它有四个相同的回文串SSSS相连组成 枚举中间x 找右边的中间y满足 y-r[y]<=x y<=x+r[x]/2 用个set维护 注意中间只能是# #include <cstdio> #include <cstring> #include <algorithm> #include <set> using namespace std; ; typedef long long ll; int n; char s[N],str[N…
BZOJ 2342: [Shoi2011]双倍回文
Sol Manacher. 非常裸的Manacher啊...为什么有那么多人写Manacher+并查集?Set?Treap?...好神奇... 你只需要在 \(p[i]++\) 的位置加上判断就可以了,不需要任何数据结构维护答案... 你要保证两个点都在'#'字符上就可以了... Code /************************************************************** Problem: 2342 User: BeiYu Language: C++…
bzoj 2342 [Shoi2011]双倍回文(manacher,set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题意] 求出形如w wR w wR的最长连续子串. [思路] 用manacher算法计算出p[],表示以i与i+1为中心的最长回文字串长度/2 枚举第一个wR的结束位置x,当且仅当y-p[y]<=x且y<=x+p[x]/2子串[x+1,y]是一个答案,更新ans. 满足的条件是一个二维偏序,按照y-p[y]排序,在查询x之前保证将所有满足第一个式子的x'加入set,查询时找…