弗吉桑

Time Limit: 3000 MS     Memory Limit: 64 MB
Submit Status

弗吉桑是一座横跨清水河大草原的活火山,位于子科技大学主楼东北方约 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
1 2 3 2 1
5
1 2 3 2 3
5
3

Hint

样例第一组数据:

样例第二组数据:

Source

2018 UESTC ACM Training for Search Algorithm and String    

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算法)的更多相关文章

  1. 回文串--Manacher算法(模板)

    用途:在O(n)时间内,求出以每一个点为中心的回文串长度. 首先,有一个非常巧妙的转化.由于回文串长度有可能为奇数也有可能为偶数,说明回文中心不一定在一个字符上.所以要将字符串做如下处理:在每两个字母 ...

  2. luoguP4555 [国家集训队]最长双回文串 manacher算法

    不算很难的一道题吧.... 很容易想到枚举断点,之后需要处理出以$i$为开头的最长回文串的长度和以$i$为结尾的最长回文串的长度 分别记为$L[i]$和$R[i]$ 由于求$R[i]$相当于把$L[i ...

  3. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  4. 最长回文---hdu3068 (回文串 manacher 算法模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...

  5. 37:密码截取(回文串manacher算法)

    题目描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如 ...

  6. 【BZOJ2565】最长双回文串 (Manacher算法)

    题目: BZOJ2565 分析: 首先看到回文串,肯定能想到Manacher算法.下文中字符串\(s\)是输入的字符串\(str\)在Manacher算法中添加了字符'#'后的字符串 (构造方式如下) ...

  7. HDU3068 回文串 Manacher算法

    好久没有刷题了,虽然参加过ACM,但是始终没有融会贯通,没有学个彻底.我干啥都是半吊子,一瓶子不满半瓶子晃荡. 就连简单的Manacher算法我也没有刷过,常常为岁月蹉跎而感到后悔. 问题描述 给定一 ...

  8. Palindrome(最长回文串manacher算法)O(n)

     Palindrome Time Limit:15000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  9. 九度OJ 1528 最长回文子串 -- Manacher算法

    题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...

随机推荐

  1. spark-Worker内部工作流程

  2. 021.掌握Pod-Pod调度策略

    一 Pod生命周期管理 1.1 Pod生命周期 Pod在整个生命周期过程中被系统定义了如下各种状态. 状态值 描述 Pending API Server已经创建该Pod,且Pod内还有一个或多个容器的 ...

  3. 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动

    由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...

  4. [springboot 开发单体web shop] 7. 多种形式提供商品列表

    上文回顾 上节 我们实现了仿jd的轮播广告以及商品分类的功能,并且讲解了不同的注入方式,本节我们将继续实现我们的电商主业务,商品信息的展示. 需求分析 首先,在我们开始本节编码之前,我们先来分析一下都 ...

  5. centos7 防火墙屏蔽IP

    1.屏蔽指定IP:124.115.0.199 iptables -I INPUT -s 124.115.0.199 -j DROP 2.屏蔽IP段: iptables -I INPUT -s 61.3 ...

  6. PostGIS 导入SHP文件并与ArcGIS连接

    运行环境: ArcGIS10.4 PostGreSql9.4 PostGIS2.2(需勾选空间数据库,否则需要重新安装) 实现步骤: 方法一: 1.打开pgAdminIII,数据库节点上右键,新建数据 ...

  7. Java基础知识总结之多线程

    1.基本概念 进程是程序的一次动态执行过程,是系统进行资源分配和调度运行的基本单位. 线程是进程的一个实体,它是比进程更小的的能够独立运行的基本单位.在引入线程的操作系统中,通常都是把进程作为分配资源 ...

  8. oracle表结构

    表管理 新建表 语法 create table 表名 ( 列名1 类型(长度), 列名2 类型(长度), 列名3 类型(长度) ); create table:关键字,建表 后跟新建表的表名,表名长度 ...

  9. Lab6:进程的调度

    CPU调度 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可使用的CPU资源 调度策略 比较调度算法的准则 CPU使用率 吞吐量 周转时间 就绪等待时间 响应时间 吞吐量与 ...

  10. [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]

    [接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...