HDU 4513 吉哥系列故事 完美队形II (manacher)-程序员宅基地

技术标签: 字符串  字符串 - KMP | EXKMP | Manacher  manacher  

题意:

N<=105,,

分析:

p,#

代码:

//
//  Created by TaoSama on 2015-11-03
//  Copyright (c) 2015 TaoSama. All rights reserved.
//
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>

using namespace std;
#define pr(x) cout << #x << " = " << x << "  "
#define prln(x) cout << #x << " = " << x << endl
const int N = 2e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;

int n, k, p[N];
int a[N], s[N];

int manacher() {
    s[0] = '@'; s[1] = '#'; n = 2;
    for(int i = 0; i < k; ++i)
        s[n++] = a[i], s[n++] = '#';
    s[n] = 0;

    int mx = 0, id, ret = 0;
    for(int i = 1; i < n; ++i) {
        p[i] = mx > i ? min(mx - i, p[2 * id - i]) : 1;
        while(s[i - p[i]] == s[i + p[i]]) {
            if(p[i] == 1 || s[i + p[i]] == '#') {}
            else {
                if(s[i + p[i]] > s[i + p[i] - 2]) break;
            }
            ++p[i];
        }
        if(mx < i + p[i]) mx = i + p[i], id = i;
        ret = max(ret, p[i] - 1);
    }
    return ret;
}

int main() {
#ifdef LOCAL
    freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
//  freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endif
    ios_base::sync_with_stdio(0);

    int t; scanf("%d", &t);
    while(t--) {
        scanf("%d", &k);
        for(int i = 0; i < k; ++i) scanf("%d", a + i);
        printf("%d\n", manacher());
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lwt36/article/details/49623195

智能推荐

基于CUBEMX和STM32C8T6的同轴麦轮小车制作(一)——整体框架构思_共轴麦轮平衡车传递函数-程序员宅基地

文章浏览阅读4.8k次,点赞4次,收藏18次。基于CUBEMX和STM32C8T6的同轴麦轮小车制作(一)——整体框架构思一、摘要拟设计一款两轮的麦轮平衡车,可以实现全向移动(但是不能转弯23333),具体实现功能为:(1)保持直立(PID调节,角度环、速度环)需要的参量:角度环PD调节:角度(陀螺仪),角加速度(陀螺仪)速度环PI调节:速度(编码器),速度积分(编码器)(2)全向移动:需要的参量:平移环PD调节:横向速度(通过编码器反馈值解算),加速度(陀螺仪)(3)可以遥控:HC-05蓝牙模块,改变目标前进速度、平移速度。(_共轴麦轮平衡车传递函数

autojs健康天天报(企业微信)——JZU_autoxjs企业微信-程序员宅基地

文章浏览阅读7.6k次,点赞7次,收藏35次。前言我们学校每天需要健康打卡,是在企业微信里进行打卡的,需要定位,输入体温,点击选项,然后提交,每个学校的打卡方式肯定是有所不同的,欢迎借鉴和提问,当然如果有帮助的话,感谢一键三连啦。个人反省,可以不看作为刚入门的小白,第一次写JavaScript,进行自动化软件一、说明就是模拟点击,没什么技术含量,当时接触autojs的第一个程序写的就是这个打卡,所以真的很简单,就是很多细节需要扣,这里为了写的清楚明白,尽量把我当初遇到的问题都写下来,希望正好能解决你的问题。完整程序在最后二、详细解_autoxjs企业微信

微信小程序:button组件的边框设置_微信小程序的button自动加margin-程序员宅基地

文章浏览阅读783次。版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tangxiujiang/article/details/77718831 button的边框是用:after方式实现的,用户如果在button上定义边框会出现两条线,..._微信小程序的button自动加margin

Mac 安装VMware_atmwvmd-程序员宅基地

文章浏览阅读8.1k次,点赞8次,收藏37次。Mac 安装VMware虚拟机打不开/dev/vmmon无此文件或目录在Mac系统里安装虚拟机软件VMware Fusion的时候,有的时候会提示打不开/dev/vmmon无此文件或目录,或者是断裂管道。这种情况可以到系统偏好设置里设置一下即可。工具:苹果Mac系统虚拟机软件VMware Fusion1.安装虚拟机VMware Fusion的时候,提示提示打不开/dev/vmmon:断裂管道。请确保已载入内核模块“vmmon”。2.点击“好”3.点击屏幕左上角的苹果标志4.选择“系统偏_atmwvmd

查看Linux内核版本和系统版本信息_uos系统怎么看linux的发行版本-程序员宅基地

文章浏览阅读7.6k次。查看Linux内核版本和系统版本信息**一、查看Linux内核版本命令(两种方法):1、cat /proc/version2、uname -a二、查看Linux系统版本的命令(3种方法):1、lsb_release -a,即可列出所有版本信息这个命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian…等发行版。2、cat /etc/redhat-release,这..._uos系统怎么看linux的发行版本

Android-001-标题栏(最上面栏的appname)文字居中_appcompatactivity 中标题居中显示-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏10次。Android studio-标题栏(最上面栏)文字居中-002-2020-3-25大致结构如上在res文件夹下的layout文件夹下1.新建title_name.xml文件<?xml version="1.0" encoding="utf-8"?><TextView ="http://schemas.android.com/apk/res/a..._appcompatactivity 中标题居中显示

随便推点

[教程] 手把手教你如何安装Google Play框架服务不闪退_google play 框架 安装 使用-程序员宅基地

文章浏览阅读7.9w次,点赞12次,收藏101次。转自《ZOL平板电脑论坛》,作者:脑袋不会坏 题目:《Google Play闪退报错各种问题解决以及Google框架服务的安装方法 》。网址:http://padbbs.zol.com.cn/1/197_246.html。感谢原文作者“脑袋不会坏”。太详细了,给小白的 准确 刷机教程。手把手教你。首先说说为什么教唆大家安装Google的各种框架服务还有Goo_google play 框架 安装 使用

Java基础自学笔记——第十一章:继承和多态_类circle继承父类geometricobject语法格式是什么-程序员宅基地

文章浏览阅读296次。第十一章:继承和多态一.父类和子类1.继承可以使你创建一个类(父类),之后可以扩充该类为一个更加特定的类(子类)public class Circle extends GeometricObject{}Circle为子类,也可称为次类、派生类、扩展类GeometricObject为父类,也成为基类,超类extends为继承关键字2.注意子类不是父类的子集,子类通常比父类包含更多..._类circle继承父类geometricobject语法格式是什么

java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext-程序员宅基地

文章浏览阅读8.2k次,点赞3次,收藏4次。使用SAXReader时报 java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext原因:缺少jar包使用SAXReader需要两个jar包dom4j-1.6.1.jarjaxen-1.1-beta-6.jar ..._java.lang.noclassdeffounderror: org/jaxen/namespacecontext

jTopo如何实现不可拖拽_jtopo禁止拖动-程序员宅基地

文章浏览阅读738次。jTopo如何实现不可拖拽我们在node节点进行拖拽的时候进行监听,使用的是mousedrag事件,然后设置所拖动节点的dragable为falsethis.scene.mousedrag(function(e)){ e.target.dragable = false;//将拖拽设置为false e.target.visible = false;//将节点设置为不可见}如果不懂 this.scene 结构的可以参考我的另一篇简单入门的topo文章https://blog.csdn.net/we_jtopo禁止拖动

个人网站开发流程_个人网站设计方案,网站逻辑结构设计,目录结构设计-程序员宅基地

文章浏览阅读5.7k次,点赞2次,收藏25次。1.确定主题选择主题应该是小而精,目标定位要小,内容要精。不要去试图制作一个包罗万象的站点,这往往会失去网站的特色,也会带来高强度的劳动,给网站的及时更新带来困难。一定记住,在互联网只有第一,没有第二。2.选择域名在互联网世界中,域名就是网站的名字。一个好记,易记得域名会给个人网站加分,当积累了一定的用户的人气的个人网站,域名的价值就会体现出来。3.学习网页设计和开发技术对于常..._个人网站设计方案,网站逻辑结构设计,目录结构设计

React Native学习笔记(3)--FlexBox_默认情况下伸缩容器中只有一个行并且与什么方向一致-程序员宅基地

文章浏览阅读345次。React 学习笔记一、FlexBoxFlexBox(弹性盒子布局),它是为了简单快速地完成各种伸缩性的设计而提出来的。它可以为传统的盒子模型布局带来更大的灵活性。目前主流的浏览器都已经支持它了。1、布局模型flexbox布局由伸缩容器和伸缩项目组成。任何一个元素都可以指定为flexbox布局,只要设置display的属性为flex或inline-flex即可。伸缩容器的子元素就成为伸缩项目,伸缩项_默认情况下伸缩容器中只有一个行并且与什么方向一致

推荐文章

热门文章

相关标签