/*
Subject: Manacher Algorithm
Author : a_clay
Created Date : 2011-12-26
Sample : hdu 3068
*/
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#define Bug cout << "here\n";
using namespace std;
const int N = 110005;
char str1[N];
char str[2*N]; //start from index 1
int rad[2*N], nn, n;
void Manacher(int *rad, char *str, int n) { /* str 是这样一个字符串(下标从1开始):
举例:若原字符串为"abcd",则str为"$#a#b#c#d#",最后还有一个终止符。
n为str的长度,若原字符串长度为nn,则n=2*nn+2。
rad[i]表示回文的半径,即最大的j满足str[i-j+1...i] = str[i+1...i+j],
而rad[i]-1即为以str[i]为中心的回文子串在原串中的长度*/
int i, id = 0, mx = 0;
for(i = 1; i < n; i++) {
if(mx > i) {
rad[i] = min(rad[2*id - i], mx - i);
}
else rad[i] = 1;
while(str[i+rad[i]] == str[i-rad[i]]) rad[i]++;
if(rad[i] + i > mx) {
mx = i + rad[i];
id = i;
}
}
}
int main() {
int i, ans;
while(cin >> str1) {
nn = strlen(str1);
n = 2*nn + 2;
str[0] = '$';
str[n] = '\0';
for(i = 0; i <= nn; i++) {
str[2*i + 1] = '#';
if(i != nn) str[2*i + 2] = str1[i];
}
memset(rad, 0, sizeof(rad));
Manacher(rad, str, n);
ans = 1;
for(i = 0; i < n; i++) {
ans = max(rad[i], ans);
}
cout << ans - 1 << endl;
}
return 0;
}
相关推荐
SpringBoot Actuator未授权访问漏洞实战:从发现到利用
本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。
后缀数组学习笔记
基础 首先我们要知道两种排序方法 Q:为什么不用快排呢? A:在集合很大的时候可以用快排,但数据小的话。。。nlogn就显得很大了 基数排序 基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数 还是看一波栗子吧 第一步 假设LSD原来有一串数值如下所示: 73, 22, 93, 43, 55, 14, 28, 65, 39
HDR视频技术之七:逆色调映射
HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。
后缀数组专题与代码模板
后缀数组 DA(倍增)算法求 SA[N] 与 Rank[N] (时间O(NlogN),空间O(N)) sa[i] : 表示 排在第i位的后缀 起始下标 rank[i] : 表示后缀 suffix(i)排在第几 height[i] : 表示 sa[i-1] 与 sa[i] 的LCP 值 h[i]: 表示 suffix(i)与其排名前一位的 LCP值 const int N ...
手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码)
本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。
【寄存器模型】一、一个简单的寄存器模型
在描述寄存器模型之前,首先来了解一下实际寄存器的组成结构:如下图所示的DUT内部真实的寄存器寄存器中最小的一个单位是域(field),域是由一个或多个bit拼接而成的。一个或多个域就构成了一个寄存器(reg)。一个或多个寄存器就构成了一个块(block)。将DUT中的寄存器抽象出来,建立寄存器模型,如下图所示:uvm library已经定义好了field、reg、block等相关的概念,构建寄存器模型时,只需要继承这些类即可。:构建寄存器模型中的域段。uvm_reg。...
后缀数组(O(n)三分实现)
比起WC关于后缀数组的倍增法,要更有效率,由于模版使用的是指针,所以在new和delete处效率会有所消耗 来自NIT的后缀数组模版 注意在字符串间加入特殊符号进行区分 避免LCP越界 SAMLPE测试为HDU 1403~~ #include<iostream> #include<cmath> #include<cstring>...
利用Android系统漏洞实现后台弹窗(外弹)
关键:从 Android 8.0(API 26)开始,禁止使用 context.sendBroadcast() 发送隐式广播(即没有指定 setPackage() 或明确组件的广播)。demo核心代码展示利用Android显示系统和广播系统的漏洞实现在后台弹窗的功能,支持最新Android15,16版本。核心功能都是在so层去做,大量使用了jni反调, 如果要上架到应用市场,需要对代码做进一步混淆,加固以应对市场安全扫描。3,开启虚拟显示窗口,这是个透明像素窗口。5,可开启一个线程,调用这个外弹窗口。
后缀数组——处理字符串的有力工具
<br />后缀数组——处理字符串的有力工具<br />作者:罗穗骞<br />2009年1月<br />【摘要】<br /> 后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组的方法,重点介绍如何用简洁高效的代码实现,并对两种算法进行了比较。第二部分介绍后缀数组在各种类型题目中的具体
经典算法之——解决全排列问题以及详解
回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];
FCC 首个扫地机器人豁免落地,Matic 凭什么抢先?
Matic获FCC首个扫地机器人豁免,实为提前布局的合规姿态。其产品在美国组装,并采用已认证射频模组,虽未达65%美国成分门槛,但已具备“本土制造”优势。豁免本质是对既有合规状态的确认,而非解救。此举在商业上放大品牌价值,抢占“安全、合规、本土”叙事高地,凸显供应链安全正取代技术标准成为监管核心。未来合规成本将攀升,规则主导权仍在FCC手中。
HDU 3068 最长回文串
题目大意:如题 思路:manacher算法,第一次没听懂..这次终于弄懂了..跟扩展KMP很像.... 先把在博客上看到的思想贴出来: 其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧。 首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长,
【C语言】初识C语言(上篇)
初识C语言第一部分
HDU 3068 最长回文
Manacher算法练笔,O(n)求最长回文子串。 参考资料:http://blog.youkuaiyun.com/ggggiqnypgjg/article/details/6645824 http://www.felix021.com/blog/read.php?2040 后缀数组和拓展KMP也可以求,不过时间复杂度都是O(nlogn)。 1 #include <cstd...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
后缀数组nlogn模板
int t1[maxn],t2[maxn],c[maxn]; bool cmp(int *r,int a,int b,int l) { return r[a]==r[b] &&r[l+a] == r[l+b]; } void get_sa(int str[],int sa[],int Rank[],int height[],int n,int m) {
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
hdu 3068最长回文(hash)
题目链接:【hdu 3068】 求一个字符串(len 一般解法是manacher,但是这一题用hash也是可以ac的 假设当前判断的是以i为中心偶数最长回文串,那么s[2*i+1-k……i]与s[i+1……k]的哈希值必定相同 假设当前判断的是以i为中心奇数最长回文串,那么s[2*i-k……i-1]与s[i+1……k]的哈希值必定相同 用二分求出相应的k #include #incl
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
后缀数组 详解
字符串前缀:从字符串开头到字符串某个位置 字符串后缀:从字符串某个位置到字符串结尾 ( 原串 和 空字符串 也是 前缀(后缀)) 后缀数组:将所有后缀按字典序排序后,得到的数组 如果我们直接将每个字符串进行比较,复杂度为 O( nlogn * n ) ...
后缀数组(dc3) 时间 O(n) 空间 O(3n)
模板 1 #define F(x) ((x)/3+((x)%3==1?0:tb)) 2 #define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2) 3 4 struct SuffixArray{ 5 int sa[maxn*3];//排名为i的后缀的起始下标 6 int Rank[maxn*3];//起始下标为...
Hdu3068最长回文(扩展kmp)
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中
hdu 3177 Crixalis's Equipment (greedy - 沙王搬家问题 很好。。)
题目大意:向一个容量为V的洞中搬物品 每件物品有一个停放体积 可一个移动体积 问能否放下这些物品 解题思路:对这些物品进行排序 按照顺序依次进入洞中 排序要尽可能使得所有的东西都能进入洞中 这是一个贪心的问题 停放体积 移动体积 第一件物品 a1 b1 第二件物品 a2 b2 假设这两件物品的移动体积都不大于洞的体积V 那么将单独比较两个物品的时候会发现 a1+b2为先
两棵二叉排序树合并为一颗 -- 07年 数据结构最后一道 [专硕]@NEU
#include #include #include const int N = 105; struct Node { int value; struct Node* lchild; struct Node* rchild; }; typedef struct Node Node; Node* creat() { Node* root; int v; scanf("%d", &v
做ACM常用的C++头文件!
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
poj 1458 dp [最长公共子序列 O(n*m)]
#include #include #include using namespace std; int dp[1001][1001]; char s1[1001]; char s2[1001]; int get_max(int a, int b) { return a > b ? a : b; } int main() { int len1, len2, i, j; while
2012 天津 1002 Number (出自 ftiasch,我还不懂)
#include #include #include #include #include using namespace std; long long mySqrt(long long n){ long long r = max((long long)sqrt(n) - 5, 0LL); while((r + 1) * (r + 1) <= n){ r+
poj 1330 LCA [ vector 模拟邻接表存图 DFS 找到每个节点的层]
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include
istringstream的使用方法——ACM对输入数据的处理方法
对于有些题目的输入数据处理起来有时候要花一些心思。在这里介绍c++的istringstream类帮助大家处理这些数据 1.使用这个类要引入这个头文件 2.使用方法 对于这样一个字符串"123 123 145 ,zzz kk,k oo.jjj" 要想用istringstream来处理首先要声明一个这个类的对象 方法:istringstream iss("123 123 145 ,zzz k
260



被折叠的 条评论
为什么被折叠?



