UESTC-1975弗吉桑(回文串,manacher算法)
弗吉桑
Time Limit: 3000 MS Memory Limit: 64 MB
弗吉桑是一座横跨清水河大草原的活火山,位于子科技大学主楼东北方约 80km 处,主峰海拔 3776m , 2002 年 8 月经电子科大校土局重新测量后,为 3775.63m 。
闻名全球的弗吉桑是清水河最重要的象征之一,被视为圣山。弗吉桑与大草原、牧犬羊并列为清水河的校园象征……
对不起扯远了。
校土局希望测量弗吉桑的宽度,于是每隔一定距离测量了经过清水河大草原的多个截面中各处的海拔高度。
由于弗吉桑高度对称,所以我们认为截面中最长的连续对称海拔高度子串即为弗吉桑的宽度。注:题目没说弗吉桑就一定长着个山的形状。
由于服务器沉迷运行 Minecraft 无法自拔,导致学校算力不足。校土局希望借用三万女工的力量测量出弗吉桑的宽度。作为万千女工中的一员,你当然希望早点下班回家陪陪丈夫孩子。
你想到了一个绝妙的主意……
说人话:求最长回文串长度
Input
多组测试数据,输入第一行一个小于 100 的正整数 TT 表示测试组数。
对于每组数据,第一行一个正整数 nn ( 1≤n≤1051≤n≤105 ) ,表示某个截面上测量的海拔总个数。
接下来一行包含 nn 个非负整数 hihi ( 0≤hi≤1090≤hi≤109 ) 表示海拔高度。
Output
每组测试数据一行,输出弗吉桑的宽度。
Sample input and output
| Sample Input | Sample Output |
|---|---|
2 |
5 |
Hint
样例第一组数据:
样例第二组数据:
Source
ac代码为:
#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5;
int s[maxn],str[maxn];
int p[maxn],len2,len1;
void init(int n)
{
len1=n;
str[0]=-1;
for(int i=1;i<=2*len1;i+=2)
{
str[i]=-2;
str[i+1]=s[i/2];
}
str[2*len1+1]=-2;
str[2*len1+2]=-3;
//str[2*len1+3]=-4;
len2=2*len1+1;
}
int manacher()
{
int mx=0,ans=0,po=0;
for(int i=1;i<=len2;i++)
{
if(mx>i)
p[i]=min(mx-i,p[2*po-i]);
else
p[i]=1;
while(str[i-p[i]]==str[i+p[i]]) p[i]++;
if(p[i]+i>mx)
{
mx=p[i]+i;
po=i;
}
ans=max(ans,p[i]);
}
return ans-1;
}
int main()
{
int T,n,num;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&num),s[i]=num;
init(n);
printf("%d\n",manacher());
}
return 0;
}
UESTC-1975弗吉桑(回文串,manacher算法)的更多相关文章
- 回文串--Manacher算法(模板)
用途:在O(n)时间内,求出以每一个点为中心的回文串长度. 首先,有一个非常巧妙的转化.由于回文串长度有可能为奇数也有可能为偶数,说明回文中心不一定在一个字符上.所以要将字符串做如下处理:在每两个字母 ...
- luoguP4555 [国家集训队]最长双回文串 manacher算法
不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i ...
- bzoj 2565: 最长双回文串 manacher算法
2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...
- 最长回文---hdu3068 (回文串 manacher 算法模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...
- 37:密码截取(回文串manacher算法)
题目描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如 ...
- 【BZOJ2565】最长双回文串 (Manacher算法)
题目: BZOJ2565 分析: 首先看到回文串,肯定能想到Manacher算法.下文中字符串\(s\)是输入的字符串\(str\)在Manacher算法中添加了字符'#'后的字符串 (构造方式如下) ...
- HDU3068 回文串 Manacher算法
好久没有刷题了,虽然参加过ACM,但是始终没有融会贯通,没有学个彻底.我干啥都是半吊子,一瓶子不满半瓶子晃荡. 就连简单的Manacher算法我也没有刷过,常常为岁月蹉跎而感到后悔. 问题描述 给定一 ...
- Palindrome(最长回文串manacher算法)O(n)
Palindrome Time Limit:15000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- 九度OJ 1528 最长回文子串 -- Manacher算法
题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...
随机推荐
- python脚本 环境准备
现在的公司用 Python 做 Web 开发,入职到现在为止(三个月),算是入门了 Python Web 开发 但是 Python 本身是脚本语言,我还从来没有体会到脚本语言能给日常工作带来的便利 就 ...
- 018.Kubernetes二进制部署插件coredns
一 修改配置文件 1.1 下载解压 [root@k8smaster01 ~]# cd /opt/k8s/work/kubernetes/ [root@k8smaster01 kubernetes]# ...
- [LC] 700题 Search in a Binary Search Tree (二叉搜索树中的搜索) (二叉搜索树)
①中文题目 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜索树: 在上述示例 ...
- 阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器
为什么要做这个工具? 由于阿里云上的容器服务 ACK 在使用成本.运维成本.方便性.长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes ...
- firefox浏览器window.event is undefined问题
获取鼠标坐标,IE下window.event.clientX和window.event.clientY就可以获取x,y的座标了.但是firefox却不行,浏览器报错window.event is un ...
- java多线程,多线程加锁以及Condition类的使用
看了网上非常多的运行代码,很多都是重复的再说一件事,可能对于java老鸟来说,理解java的多线程是非常容易的事情,但是对于我这样的菜鸟来说,这个实在有点难,可能是我太菜了,网上重复的陈述对于我理解这 ...
- [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)
目录 概述 LCD1602 LCD1602是什么? LCD1602的管脚 RS_数据/命令选择 E_使能 D0-D7 LCD1602有个DDRAM LCD1602还有个CGROM 指令集 清屏 进入模 ...
- pycham永久激活及conda环境部署
1.pycham安装 一般不选择最新版本,我用的是2018.3,选择 Professional专业版 1.1 官网地址: https://www.jetbrains.com/pycharm/downl ...
- 解密面试中的套路,你都get到了么?
如果大家有关注一些测试类的公众号或者论坛的话,肯定会发现很多文章都在表示现在行业的寒冬冷潮来了!然后有很多测试行业从业者,或者转行测试行业者都表示:工作好难找,公司跑了千千万,依然拿不到一个offer ...
- Tensorflow常用函数说明
1.矩阵操作 1.1矩阵生成 这部分主要将如何生成矩阵,包括全0矩阵,全1矩阵,随机数矩阵,常数矩阵等 sess=tf.InteractiveSession() #x=tf.ones([2,3],tf ...