当前位置: 首页 > news >正文

[poj] 3974 Palindrome

原题

manacher板子题

manacher算法:
用于处理一个字符串的回文子串长度的算法,时间复杂度O(n)。
首先为了避免奇偶的问题,我们将原字符串转化一下,在每个字符见加一个'#',然后首尾加一个不一样的字符如'@'和'?'。
然后我们维护两个变量mxr和p,分别为到当前位置所匹配到的最右节点和匹配了这个节点的中心位置。而对于将要匹配的位置i,我们有三种可能:
1、mxr<i,那么i的ans>=1(也就是需要暴力匹配)
2、mxr-i>a[j],那么i的ans应该等于关于p与其对称的j的ans。
3、mxr-i<=a[j],那么i的ans>=mxr-i。

所以上代码咯~

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000010
using namespace std;
int l,cnt,mxr,p,a[2*N],mx;
char s[2*N];

int main()
{
    while(1)
    {
    scanf("%s",s+1);
    s[0]='@';
    l=strlen(s+1);
    if (s[1]=='E' && s[2]=='N' && s[3]=='D') break;
    cnt++;
    for (int i=l;i>=1;i--) s[i*2]=s[i];
    for (int i=1;i<=2*l+1;i+=2) s[i]='#';
    s[2*l+2]='?';
    l=2*l+1;
    mx=mxr=0;
    for (int i=1,x;i<=l;i++)
    {
        if (mxr>i) x=min(a[2*p-i],mxr-i);
        else x=1;
        while (s[i-x]==s[i+x]) x++;
        if (i+x>mxr) mxr=i+x,p=i;
        a[i]=x;
        mx=max(mx,a[i]);
    }
    printf("Case %d: %d\n",cnt,mx-1);
    }
    return 0;
}

转载于:https://www.cnblogs.com/mrha/p/7868786.html

相关文章:

  • linux遍历目录删除指定文件,shell脚本删除目录下的指定文件
  • 【转】VC++计算当前时间点间隔N天的时间(不使用CTimeSpan类)
  • linux下新建shell命令接口,Linux Shell(脚本)编程入门
  • Ubuntu下搭建基于apache2的gerrit+gitweb服务器
  • Linux每个用户单独配置ssh,linux – 每个用户的SSH MOTD
  • linux针对内存uce隔离内存,Linux运维知识之在linux系统中,iomem_resource的信息被输出到/proc/iomem中...
  • intellij IDEA里各图标对应的文件类型
  • linux目录中grid,用MongoDB基于GridFS存储文件
  • leetCode-Majority Element
  • linux bind 服务器同步,bind9.7 智能dns主从同步配置
  • nginx-php-fpm
  • linux打包解压工具,打包压缩、解压缩工具详解
  • linux邮件服务器安装与配置过程,Linux操作系统邮件服务器的搭建过程解析
  • Java提高十五:容器元素比较ComparableComparator深入分析
  • linux addr2line 用法,addr2line的用法
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 0基础学习移动端适配
  • chrome扩展demo1-小时钟
  • hadoop集群管理系统搭建规划说明
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • SegmentFault 2015 Top Rank
  • vue.js框架原理浅析
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 规范化安全开发 KOA 手脚架
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 终端用户监控:真实用户监控还是模拟监控?
  • AI算硅基生命吗,为什么?
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #大学#套接字
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (第二周)效能测试
  • (规划)24届春招和25届暑假实习路线准备规划
  • (四)模仿学习-完成后台管理页面查询
  • (一一四)第九章编程练习
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)c++ std::pair 与 std::make
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *** 2003
  • **python多态
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net framework4与其client profile版本的区别
  • .NET 读取 JSON格式的数据
  • .net对接阿里云CSB服务
  • .NET分布式缓存Memcached从入门到实战
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .sdf和.msp文件读取
  • @EventListener注解使用说明
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20171106]配置客户端连接注意.txt