uoj103 apio2014 Palindromes
题目链接:http://uoj.ac/problem/103
题解:
首先,我们可以用后缀自动机算出每个字符串的出现次数。然后我们可以用manacher找出所有不同的回文串(o(n)个),统计答案即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 300005
using namespace std;
int n,tot,num[maxn<<1],ch[maxn<<1][26],fail[maxn<<1][20],len[maxn<<1],f[maxn<<1],last,pos[maxn<<1],cd[maxn<<1];
char s[maxn<<1];
long long ans,ans1,ans2;
int depend(int x){
int p=last,np=++tot;len[np]=len[p]+1;
while(p!=-1&&!ch[p][x])ch[p][x]=np,p=fail[p][0];
if(p==-1)fail[np][0]=0;
else{
int q=ch[p][x];
if(len[q]==len[p]+1)fail[np][0]=q;
else{
int nq=++tot;len[nq]=len[p]+1;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
fail[nq][0]=fail[q][0];fail[q][0]=fail[np][0]=nq;
while(p!=-1&&ch[p][x]==q)ch[p][x]=nq,p=fail[p][0];
}
}
return last=np;
}
int head,tail,d[maxn<<1];
void bfs(){
head=1;tail=0;
for(int i=1;i<=tot;i++)if(cd[i]==0)d[++tail]=i;
while(head<=tail){
int x=d[head++];
num[fail[x][0]]+=num[x];cd[fail[x][0]]--;
if(cd[fail[x][0]]==0)d[++tail]=fail[x][0];
}
}
int main(){
scanf("%s",s+1);n=strlen(s+1);fail[0][0]=-1;
for(int i=1;i<=n;i++)num[pos[i]=depend(s[i]-'a')]++;
for(int i=1;i<=tot;i++)cd[fail[i][0]]++;bfs();
fail[0][0]=0;
for(int i=1;i<20;i++)
for(int j=1;j<=tot;j++)
fail[j][i]=fail[fail[j][i-1]][i-1];
int id=1,mx=1;
for(int i=n;i;i--)s[i<<1|1]='#',s[i<<1]=s[i];
s[1]='#';ans=ans1=ans2=0;
for(int i=2;i<=(n<<1);i++){
if(i<=mx)f[i]=min(mx-i+1,f[id*2-i]);
else f[i]=1;
while(i-f[i]>0&&s[i+f[i]]==s[i-f[i]])f[i]++;
for(int j=mx-i+2;j<f[i];j+=2){
int p=pos[i/2+j/2];
for(int k=19;k>=0;k--)if(len[fail[p][k]]>=j)p=fail[p][k];
if(1LL*num[p]*j>ans)ans=1LL*num[p]*j,ans1=num[p],ans2=j;
}
if(i+f[i]-1>mx){id=i;mx=i+f[i]-1;}
}
printf("%lld\n",ans);
return 0;
}
uoj103 apio2014 Palindromes的更多相关文章
- [APIO2014] [Uoj103] [Bzoj3676] Palindromes回文串 [Manacher,后缀数组]
用Manacher算法枚举回文子串,每次在后缀数组排序后的后缀数组中二分,因为用某一后缀和其他子串分别求匹配的长度,匹配长度在排序后该后缀的两侧具有单调性(匹配长度为min{H[x]|i<=x& ...
- 【APIO2014】Palindromes
#103. [APIO2014]Palindromes 统计 描述 提交 自定义测试 给你一个由小写拉丁字母组成的字符串 ss.我们定义 ss 的一个子串的存在值为这个子串在 ss 中出现的次数乘以这 ...
- UOJ#103. 【APIO2014】Palindromes PAM模板题
原文链接www.cnblogs.com/zhouzhendong/p/UOJ103.html 前言 我终于会PAM啦 感谢CLY大佬手把手教我PAM 题解 建个 PAM. 统计一下每一个节点的 Rig ...
- UOJ #103:【APIO2014】Palindromes
题意: 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. 学会马拉车之后发现还需要后缀数组才能AC ...
- [BZOJ3676][APIO2014]回文串(Manacher+SAM)
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 3097 Solved: 1408[Submit][Statu ...
- 【bzoj3676】[Apio2014]回文串 —— 回文自动机的学习
写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文 ...
- BZOJ 3676: [Apio2014]回文串
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2013 Solved: 863[Submit][Status ...
- UVA - 11584 Partitioning by Palindromes[序列DP]
UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...
- hdu 1318 Palindromes
Palindromes Time Limit:3000MS Memory Limit:0KB 64bit ...
随机推荐
- Windows下maven安装配置(包括本地化仓库配置)
一.下载maven maven官网:http://maven.apache.org/ 下载下来也就是一个压缩文件,解压.我下载的是3.5.2版本,解压之后如下: 路径为 :D:\Program Fil ...
- java集合系列之HashMap源码
java集合系列之HashMap源码 HashMap的源码可真不好消化!!! 首先简单介绍一下HashMap集合的特点.HashMap存放键值对,键值对封装在Node(代码如下,比较简单,不再介绍)节 ...
- phpQuery用法总结
项目下载地址:http://code.google.com/p/phpquery/ 获取内容的方法: 第一种:newDocumentFile phpQuery::newDocumentFile($ur ...
- 解决asp.net core 日期格式 datetime Json返回 带T的问题
原文:解决asp.net core 日期格式 datetime Json返回 带T的问题 记录一下: Startup中,将 services.AddMvc(); 改为: services.AddMvc ...
- 切换横屏幕 onCreate 多次执行问题
在AndroidManifest.xml 中activity 中添加 android:configChanges="orientation|screenSize|smallestScreen ...
- magic packet 远程唤醒需填写 IP broadcast address
之前摸索过电脑,知道hp compaq6910p有远程唤醒功能的.当时没在意.如今忽然有了实际的需求,就想起来折腾一下了.看了网上的做法,主要是双方面设置,BIOS和网卡.之后就能够用magic pa ...
- 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(三)
通过组织结构能够对项目的岗位.部门.人员进行增删改操作. 加入新部门.并为新部门加入人员: 选中部门后,点击鼠标右键,能够选择加入平级部门或下属部门. 新建部门时,须要给部门设置部门编号.名称.与部门 ...
- OSI七层模型详解(转)
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
- C#中使用byte[]数据,生成Bitmap
/// <summary> /// 使用byte[]数据,生成256色灰度 BMP 位图 /// </summary> /// <param name="ori ...
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2
3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 ...