ural1297 求最长回文子串 | 后缀数组
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #define N 20005
- using namespace std;
- int buf1[N],buf2[N],sa[N],rnk[N],buc[N],n,height[N],ans,Log[N],pos,Min[N][];
- char s[N];
- void suffix_sort()
- {
- int *x=buf1,*y=buf2,m=;
- for (int i=;i<m;i++) buc[i]=;
- for (int i=;i<=n;i++) buc[x[i]=s[i]]++;
- for (int i=;i<=m;i++) buc[i]+=buc[i-];
- for (int i=n;i;i--) sa[buc[x[i]]--]=i;
- for (int k=;k<=n;k<<=)
- {
- int p=;
- for (int i=n-k+;i<=n;i++)
- y[++p]=i;
- for (int i=;i<=n;i++)
- if (sa[i]>k) y[++p]=sa[i]-k;
- for (int i=;i<=m;i++) buc[i]=;
- for (int i=;i<=n;i++) buc[x[y[i]]]++;
- for (int i=;i<=m;i++) buc[i]+=buc[i-];
- for (int i=n;i;i--) sa[buc[x[y[i]]]--]=y[i];
- swap(x,y),x[sa[]]=p=;
- for (int i=;i<=n;i++)
- if (y[sa[i-]]==y[sa[i]] && y[sa[i-]+k]== y[sa[i]+k])
- x[sa[i]]=p;
- else x[sa[i]]=++p;
- if ((m=p)>=n) break;
- }
- for (int i=;i<=n;i++)
- rnk[sa[i]]=i;
- for (int i=,j,k=;i<=n;i++)
- {
- if (rnk[i]==) continue;
- if (k) k--;
- j=sa[rnk[i]-];
- while (s[i+k]==s[j+k] && i+k<=n && j+k<=n) k++;
- height[rnk[i]]=k;
- }
- }
- void InitRmq()
- {
- for (int i=;i<=n;i++) Min[i][]=height[i];
- for (int j=;j<=;j++)
- for (int i=;i+(<<j)-<=n;i++)
- Min[i][j]=min(Min[i][j-],Min[i+(<<j-)][j-]);
- }
- int Query(int x,int y)
- {
- int i=rnk[x],j=rnk[y];
- if (i>j) swap(i,j);
- int len=Log[j-i];
- return min(Min[i+][len],Min[j-(<<len)+][len]);
- }
- int main()
- {
- scanf("%s",s+);
- n=strlen(s+);
- if (n==)
- {
- puts(s+);
- return ;
- }
- s[n+]='#';
- for (int i=;i<=n;i++)
- s[*n+-i]=s[i];
- n=n*+;
- suffix_sort();
- for (int i=;i<=n;i++)
- Log[i]=Log[i>>]+;
- InitRmq();
- for (int i=;i<=(n-)/;i++)
- {
- int tmp=Query(i,n-i+);
- if (tmp*>ans) ans=tmp*,pos=i-tmp;
- tmp=Query(i,n-i+);
- if (tmp*->ans) ans=tmp*-,pos=i-tmp+;
- }
- for (int i=;i<=ans;i++)
- putchar(s[i+pos-]);
- return ;
- }
ural1297 求最长回文子串 | 后缀数组的更多相关文章
- URAL 1297 最长回文子串(后缀数组)
1297. Palindrome Time limit: 1.0 secondMemory limit: 64 MB The “U.S. Robots” HQ has just received a ...
- Ural1297 最长回文子串(后缀数组+RMQ)
/* 源程序丢失QWQ. 就不粘代码了. 大体做法是把串反转然后连接. 做一遍后缀数组. 对height做一遍rmq. 然后对于每个位置的奇偶分别判断, 记下pos. 注意求的是[l+1,r]的hei ...
- hdu 3068 最长回文(manachar求最长回文子串)
题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...
- PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- Manacher模板( 线性求最长回文子串 )
模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- Manacher算法 O(n) 求最长回文子串
转自:http://bbs.dlut.edu.cn/bbstcon.php?board=Competition&gid=23474 其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧. ...
- Manacher算法——求最长回文子串
首先,得先了解什么是回文串.回文串就是正反读起来就是一样的,如“abcdcba”.我们要是直接采用暴力方法来查找最长回文子串,时间复杂度为O(n^3),好一点的方法是枚举每一个字符,比较较它左右距离相 ...
随机推荐
- .NET MVC和.NET WEB api混用时注意事项
1.同时配置了mvc路由和api路由时,mvc路由无法访问(调用所有mvc路由全部404错误) 在Global.asax中,需注意路由注册的顺序,将api路由注册放在最后: 即将 void Appli ...
- zookeeper应用:屏障、队列、分布式锁
zookeeper工具类: 获取连接实例:创建节点:获取子节点:设置节点数据:获取节点数据:访问控制等. package org.windwant.zookeeper; import org.apac ...
- 关于html2canvas清晰度
最近有个小项目 需要生成海报让用户去分享~~~vue做的,海报通过html2canvas 生成. 遇到的最大问题是生成图片的清晰度~~网上找了好多方法. 放大倍数!~网上找的~~ var cntEle ...
- openjudge-2的100次方阶乘
开始进行的第一天 #include <stdio.h> #include <string.h> int main() { int n; scanf("%d" ...
- centos 6.5 启动时卡在进度条位置无法进入系统解决办法。
今天公司服务器因突然断电导致phddns 花生壳 启动失败,一直卡在启动进度条页面. 解决办法 1.按F5查看卡在什么位置, 2.查看解决方法:程序卡住的情况下,直接备份资料后,卸载程序重启就可以了. ...
- leetcode7_C++整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 输出: 示例 2: 输入: - 输出: - 示例 3: 输入: 输出: 注意: 假设我们的环境只能存 ...
- SGU 194 Reactor Cooling(无源无汇上下界可行流)
Description The terrorist group leaded by a well known international terrorist Ben Bladen is bulidin ...
- 互评Alpha版本——Thunder团队
基于NABCD评论作品 Hello World! :http://www.cnblogs.com/120626fj/p/7807544.html 欢迎来怼 :http://www.cnblogs.co ...
- java—连连看GUI
1.连连看棋盘图形化 package Link; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; impo ...
- 基于3D卷积神经网络的人体行为理解(论文笔记)(转)
基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...