BZOJ 2342: [Shoi2011]双倍回文
Sol
Manacher.
非常裸的Manacher啊...为什么有那么多人写Manacher+并查集?Set?Treap?...好神奇...
你只需要在 \(p[i]++\) 的位置加上判断就可以了,不需要任何数据结构维护答案...
你要保证两个点都在'#'字符上就可以了...
Code
/**************************************************************
Problem: 2342
User: BeiYu
Language: C++
Result: Accepted
Time:92 ms
Memory:6172 kb
****************************************************************/ #include<cstdio>
#include<iostream>
using namespace std; const int N = 500050; int n,ans;
char s[N<<1];
int p[N<<1]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
inline char mychar(char ch=getchar()){ while(ch>'z'||ch<'a') ch=getchar();return ch; } int main(){
// freopen("in.in","r",stdin); n=in();s[0]='$',s[1]='#';
for(int i=1;i<=n;i++) s[i<<1]=mychar(),s[i<<1|1]='#';
int mx=0,id=0;n=n<<1|1;
for(int i=1;i<=n;i+=2){
if(mx>i) p[i]=min(p[id+id-i],mx-i);else p[i]=1;
for(int t;s[i-p[i]]==s[i+p[i]];p[i]++) if(p[i]>=2&&((i-p[i])&1)){
t=(i+i-p[i])/2;
if(t&1) if(t+p[t]>=i) ans=max(ans,p[i]);
}
if(i+p[i]>mx) mx=i+p[i],id=i;
}
cout<<ans<<endl;
return 0;
}
BZOJ 2342: [Shoi2011]双倍回文的更多相关文章
- 2018.06.30 BZOJ 2342: [Shoi2011]双倍回文(manacher)
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串 ...
- BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1123 Solved: 408 题目连接 http://w ...
- bzoj 2342: [Shoi2011]双倍回文 -- manacher
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符 ...
- Manacher || BZOJ 2342: [Shoi2011]双倍回文 || Luogu P4287 [SHOI2011]双倍回文
题面:[SHOI2011]双倍回文 题解:具体实现时,就是在更新mr时维护前半段是回文串的最长回文串就好了 正确性的话,因为到i时如果i+RL[i]-1<=mr,那么答案肯定在i之前就维护过了: ...
- BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] ...
- BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)
题目大意:略 先建出$PAM$ 因为双倍回文串一定是4的倍数,所以找出$PAM$里所有$dep$能整除4的节点 看这个串是否存在一个回文后缀,长度恰好为它的一半,沿着$pre$链往上跳就行了 暴跳可能 ...
- BZOJ 2342 [Shoi2011]双倍回文(Manacher)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2342 题意:求最长子串使得它有四个相同的回文串SSSS相连组成. 首先跑一边Manach ...
- BZOJ 2342: [Shoi2011]双倍回文 [Manacher + set]
题意: 求最长子串使得它有四个相同的回文串SSSS相连组成 枚举中间x 找右边的中间y满足 y-r[y]<=x y<=x+r[x]/2 用个set维护 注意中间只能是# #include ...
- bzoj 2342 [Shoi2011]双倍回文(manacher,set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题意] 求出形如w wR w wR的最长连续子串. [思路] 用manache ...
随机推荐
- Java web 使用页面压缩
借助类,相关依赖: <!-- https://mvnrepository.com/artifact/net.sourceforge.pjl-comp-filter/pjl-comp-filter ...
- 9-slice-scaling
9-slice-scaling http://rwillustrator.blogspot.com/2007/04/understanding-9-slice-scaling.html
- Microsoft.Web.Redis.RedisSessionStateProvider
https://github.com/Azure/aspnet-redis-providers https://www.nuget.org/packages/Microsoft.Web.RedisSe ...
- reactjs 注意点
render的return return前要留一空行 return的括号要分别各占一行,不能与html同行 return中的html必须要有顶层容器包裹 return中的循环不能用for,改用map方 ...
- 正确运用synchronized和二次判断 实现多线程安全
正确运用synchronized和二次判断 实现多线程安全,做出高效二符合预期的程序,特别是多个线程跑一个对象的时候,如下图所示: 测试代码如下: 特别注意if(shutdownRequested) ...
- JQuery中==与===、$("#")与$("")的区别
首先,== equality 等同,=== identity 恒等.==, 两边值类型不同的时候,要先进行类型转换,再比较.===,不做类型转换,类型不同的一定不等. 下面分别说明:先说 ===,这个 ...
- Java Programming Test Question 3
import java.util.HashSet; public class JPTQuestion3 { public static void main(String[] args) { HashS ...
- scanf 格式化字符串详解
scanf格式控制的完整格式: % * m l或h 格式字符 ①格式字符与printf函数中的使用方式相同,以%d.%o.%x.%c.%s.%f.%e,无%u格式.%g ...
- TP框架整合Swagger UI接口文档
1.下载swagger ui:http://swagger.io/swagger-ui/: 2.在应用目录里新建一个目录xxx:如图 3.解压后把dist目录的所有文件拷贝到新建的目录里面: 4.在新 ...
- 移动端网站优化指南-WAP篇
转载:http://seofangfa.com/mobile-seo/mobile-seo-guide.html 1.域名优化:启用短域名,例如:m.abc.com,便于用户记忆,方便搜索蜘蛛查找,减 ...