UVALive 4975 Casting Spalls
来源:互联网 发布:js防水贴瓷砖 编辑:程序博客网 时间:2024/05/18 19:21
题目链接
题意: 找一个最长的连续子串,使该子串符合这种形式: WRWR, 其中R使W的逆序串。
分析:根据题意可知 整个子串使回文,且平分两半后各自也是回文。 求回文有个经典的算法:manachar。
代码:
//回文长度:p[i]-1#include<stdio.h>#include<algorithm>#include<string.h>#include<iostream>using namespace std;const int maxn=300050;char s[maxn*2];int p[maxn*2];void manachar(){ int i,id=0,len=strlen(s); for(i=len;i>=0;i--){ s[(i<<1)+2]=s[i]; s[(i<<1)|1]='#'; } s[0]='^'; len=len*2+1; for(i=2;i<len;i++) { if(p[id]+id>i) p[i]=min(p[(id<<1)-i],p[id]+id-i); else p[i]=1; while(s[i-p[i]] == s[i+p[i]]) p[i]++; if(i+p[i]>id+p[id]) id=i; }}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%s",s); manachar(); int ans=0,h; for(int i=3;i<len;i+=2){ int M=p[i]-1; M=(M>>2)<<2; for(;M>ans;M-=4) { h=M>>1; if(p[i+h]<(M>>1)) continue; if(p[i-h]<(M>>1)) continue; ans=M; break; } } printf("%d\n",ans); } return 0;}
- UVALive 4975 Casting Spalls
- UVALive 4975 - Casting Spells Manacher+科学枚举
- UVALive 6173 Casting
- UVALive 4975 (LA 4975) Casting Spells Manacher + Set维护
- UVALive 6173|HDU 4485|B-Casting|水体
- Casting
- LA 4975(Casting Spells-manacher+暴力查找)
- uvalive 4975
- up casting down casting
- Type Casting
- Casting Strings
- Type Casting
- Type Casting
- Type Casting
- Casting malloc
- Type Casting
- Casting operator
- UVAlive 4975 Manacher+枚举
- 超级硬盘数据恢复软件 4.2.1.5注册码破解版
- 实验七 嵌套查询(V2.0)
- linux内核分析--为什么把中断分为上半部和下半步
- 我的新的开始!!!
- UM--9种图简介
- UVALive 4975 Casting Spalls
- GCD
- LINUX使用的缓存,缓冲区高速缓存
- OCP-1Z0-051-V9.02-84题
- 并查集与十度好友
- centos6 install linux apache mysql php
- Django 1.5.4 专题21 haystack whoosh
- Linux 下编译Android-VLC开源播放器详解(附源码下载)
- openSuSE 安装方法