hdu 3068 最长回文 (Manacher O(n) ) (扩展KMP和后缀数组也都可以做 O(nlogn))

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用 PCIe(Peripheral Component Interconnect Express)是计算机硬件中重要的高速串行总线标准,广泛应用于存储、网络等设备连接。其核心原理是通过差分信号实现高带宽传输,PCIe Gen2 x1的理论带宽可达5Gbps。在嵌入式开发中,PCIe扩展技术能有效解决单板计算机接口不足的问题,特别适合树莓派等微型平台。ASMedia ASM1184e作为PCIe交换芯片,可将单个接口扩展为多个,支持热插拔且免驱动,极大提升了工程灵活性。通过PCIe交换机方案,开发者能在树莓派CM 阅读详情
/*
    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;
}

Arduino智能小灯DIY:人体感应+光线感应+蓝牙控制全攻略(附完整代码) 本文提供了一份完整的Arduino智能小灯DIY制作指南。项目融合了人体感应、光线感应与蓝牙控制三大功能,通过详细的硬件清单、电路连接图、核心逻辑讲解及附带的完整代码,手把手教你打造一个能自动感知环境与人、并支持手机远程控制的智能照明装置,是入门智能家居和物联网开发的绝佳实践。 阅读详情

相关推荐

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 260

后缀数组学习笔记

基础 首先我们要知道两种排序方法 Q:为什么不用快排呢? A:在集合很大的时候可以用快排,但数据小的话。。。nlogn就显得很大了 基数排序 基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数 还是看一波栗子吧 第一步 假设LSD原来有一串数值如下所示: 73, 22, 93, 43, 55, 14, 28, 65, 39

薇小薇 389

HDR视频技术之七:逆色调映射

HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。

多媒体开发者 2429

后缀数组专题与代码模板

后缀数组 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 ...

weixin_30617695的博客 221

手把手教你用UNet实现轨道缺陷检测(附RSDDs数据集下载与完整代码)

本文详细介绍了如何使用UNet模型实现轨道缺陷检测,包括RSDDs数据集的下载与处理、UNet架构的改进与优化、训练策略设计以及模型部署的全流程。通过实战案例,展示了如何利用深度学习技术提升工业质检效率,特别适合从事工业缺陷检测和图像处理的开发者参考。

dapp9builder的博客 749

【寄存器模型】一、一个简单的寄存器模型

在描述寄存器模型之前,首先来了解一下实际寄存器的组成结构:如下图所示的DUT内部真实的寄存器寄存器中最小的一个单位是域(field),域是由一个或多个bit拼接而成的。一个或多个域就构成了一个寄存器(reg)。一个或多个寄存器就构成了一个块(block)。将DUT中的寄存器抽象出来,建立寄存器模型,如下图所示:uvm library已经定义好了field、reg、block等相关的概念,构建寄存器模型时,只需要继承这些类即可。:构建寄存器模型中的域段。uvm_reg。...

carrotbanana的博客 5368

后缀数组(O(n)三分实现)

比起WC关于后缀数组的倍增法,要更有效率,由于模版使用的是指针,所以在new和delete处效率会有所消耗 来自NIT的后缀数组模版 注意在字符串间加入特殊符号进行区分 避免LCP越界 SAMLPE测试为HDU 1403~~ #include<iostream> #include<cmath> #include<cstring>...

weixin_30922589的博客 236

利用Android系统漏洞实现后台弹窗(外弹)

关键:从 Android 8.0(API 26)开始,禁止使用 context.sendBroadcast() 发送隐式广播(即没有指定 setPackage() 或明确组件的广播)。demo核心代码展示利用Android显示系统和广播系统的漏洞实现在后台弹窗的功能,支持最新Android15,16版本。核心功能都是在so层去做,大量使用了jni反调, 如果要上架到应用市场,需要对代码做进一步混淆,加固以应对市场安全扫描。3,开启虚拟显示窗口,这是个透明像素窗口。5,可开启一个线程,调用这个外弹窗口。

2018,再出发~ 1316

后缀数组——处理字符串的有力工具

<br />后缀数组——处理字符串的有力工具<br />作者:罗穗骞<br />2009年1月<br />【摘要】<br />  后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组的方法,重点介绍如何用简洁高效的代码实现,并对两种算法进行了比较。第二部分介绍后缀数组在各种类型题目中的具体

岩山放牛娃 2969

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8795

FCC 首个扫地机器人豁免落地,Matic 凭什么抢先?

Matic获FCC首个扫地机器人豁免,实为提前布局的合规姿态。其产品在美国组装,并采用已认证射频模组,虽未达65%美国成分门槛,但已具备“本土制造”优势。豁免本质是对既有合规状态的确认,而非解救。此举在商业上放大品牌价值,抢占“安全、合规、本土”叙事高地,凸显供应链安全正取代技术标准成为监管核心。未来合规成本将攀升,规则主导权仍在FCC手中。

致力于lidar应用开发 100

HDU 3068 最长回文串

题目大意:如题 思路:manacher算法,第一次没听懂..这次终于弄懂了..跟扩展KMP很像.... 先把在博客上看到的思想贴出来: 其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧。     首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长,

muxi@Achilles的专栏 2522

【C语言】初识C语言(上篇)

初识C语言第一部分

StackFrame 4019

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...

aegt43853的博客 69

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) {

say_c_box的博客 416

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

小小西北风 1172

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

后缀数组 详解

字符串前缀:从字符串开头到字符串某个位置 字符串后缀:从字符串某个位置到字符串结尾 ( 原串 和 空字符串 也是 前缀(后缀)) 后缀数组:将所有后缀按字典序排序后,得到的数组 如果我们直接将每个字符串进行比较,复杂度为 O( nlogn * n ) ...

gronkie的博客 4161

后缀数组(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];//起始下标为...

as221360的博客 408

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中

787

hdu 3177 Crixalis's Equipment (greedy - 沙王搬家问题 很好。。)

题目大意:向一个容量为V的洞中搬物品 每件物品有一个停放体积 可一个移动体积 问能否放下这些物品 解题思路:对这些物品进行排序 按照顺序依次进入洞中 排序要尽可能使得所有的东西都能进入洞中 这是一个贪心的问题 停放体积 移动体积 第一件物品 a1 b1 第二件物品 a2 b2 假设这两件物品的移动体积都不大于洞的体积V 那么将单独比较两个物品的时候会发现 a1+b2为先

so true_interview / 8822

两棵二叉排序树合并为一颗 -- 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

so true_interview / 5912

做ACM常用的C++头文件!

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

so true_interview / 3633

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

so true_interview / 1482

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+

so true_interview / 1316

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

so true_interview / 1301

istringstream的使用方法——ACM对输入数据的处理方法

对于有些题目的输入数据处理起来有时候要花一些心思。在这里介绍c++的istringstream类帮助大家处理这些数据 1.使用这个类要引入这个头文件 2.使用方法 对于这样一个字符串"123 123 145 ,zzz kk,k oo.jjj" 要想用istringstream来处理首先要声明一个这个类的对象 方法:istringstream iss("123 123 145 ,zzz k

so true_interview / 1245
上一篇: 求回文子串O(n) manacher 算法
下一篇: hdu 1166 地兵布阵 ( 树状数组-初步) (以前 AC 的代码今天交超时!不知道何故!)
aclay
博客等级 码龄15年 37粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值