bzoj2342还是马拉车
就好比第一次写主席树的时候写了30行,第二次写了5行
这次马拉车只剩下
for(int i=,id=,mx=;i<=n;i++)
{
for(p[i]=(i<=mx)?min(p[id*-i],mx-i):;a[i-p[i]]==a[i+p[i]+];p[i]++);
if(p[i]+i>mx) id=i,mx=i+p[i];
}
(= =缩代码狂魔)
这次不要求奇偶讨论,所以连#都没插,注意在最后统计的时候可以用stl的特殊姿势
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
int n,u,v,ans,p[],q[],nex[],fir[];
char a[];
set<int> t;
inline int min(int a,int b){return (a<b)?a:b;}
inline int max(int a,int b){return (a>b)?a:b;}
bool cmp(int a,int b)
{
return (a-p[a])<(b-p[b]);
}
int main()
{
scanf("%d",&n);
char ch=getchar();
while(ch<'a' || ch>'z') ch=getchar();
for(int i=;i<=n;ch=getchar())
a[i++]=ch;
for(int i=,id=,mx=;i<=n;i++)
{
for(p[i]=(i<=mx)?min(p[id*-i],mx-i):;a[i-p[i]]==a[i+p[i]+];p[i]++);
if(p[i]+i>mx) id=i,mx=i+p[i];
}
for(int i=;i<=n;i++)q[i]=i;
sort(q+,q+n+,cmp);
int now=;
for(int i=;i<=n;i++)
{
while(now<=n&&q[now]-p[q[now]]<=i)
{
t.insert(q[now]);
now++;
}
set<int>::iterator tmp=t.upper_bound(i+p[i]/);
if(tmp!=t.begin())
{
ans=max(ans,(*--tmp-i)*);
}
}
printf("%d\n",ans);
return ;
}
马拉车差不多告一段落(以后肯定还要返工)接下来再做点网络流吧
bzoj2342还是马拉车的更多相关文章
- 【做题】BZOJ2342 双倍回文——马拉车&并查集
题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...
- BZOJ2342 Manacher + set
题一:别人介绍的一道题,题意是给出一个序列,我们要求出一段最常的连续子序列,满足:该子序列能够被平分为三段,第一段和第二段形成回文串,第二段和第三段形成回文串. 题二:BZOJ2342和这题非常的相似 ...
- hdu3068马拉车
其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听) 没想到一个简单的优化能变成O(n),感觉碉堡 不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成 ...
- Manacher's Algorithm 马拉车算法
这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...
- hdu 3068 最长回文子串 马拉车模板
前几天用后缀数组写过一次这题,毫无疑问很感人的TLE了-_-|| 今天偶然发现了马拉车模板,O(N)时间就搞定 reference:http://acm.uestc.edu.cn/bbs/read.p ...
- 字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串
Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行 ...
- 51nod 1595 回文度 | 马拉车Manacher DP
51nod 1595 回文度 题目描述 如果长度为n的字符串是一个回文串,同时它的长度为floor(n/2)的前缀和后缀是K-1度回文串,则这个字符串被称为K度回文串.根据定义,任何字符串(即使是空字 ...
- 【BZOJ2342】双倍回文(回文树)
[BZOJ2342]双倍回文(回文树) 题面 BZOJ 题解 构建出回文树之后 在\(fail\)树上进行\(dp\) 如果一个点代表的回文串长度为\(4\)的倍数 并且存在长度为它的一半的回文后缀 ...
- 小白月赛13 B小A的回文串 (马拉车算法求最长回文子串)
链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
随机推荐
- Winform自定义控件基础(二)
protected override void WndProc(ref Message m)
- C++ Bitstream类
从raknet上剥下来的 比较适用于前后端通讯,可以对BitStream进行二次封装,方便使用. BitStream.h: #ifndef __BITSTREAM_H #define __BITSTR ...
- RecyclerView解密篇(三)
在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更 ...
- 多个Class作用于同一个元素的结果分析
多个Class作用于同一个元素的结果分析 多个class作用于同一个元素出现样式冲突,因为权重相同,结果如何呢 [代码] <html> <head> <sty ...
- "传成老树白茶"献礼母亲节 邀市民品茗感受茶文化
5月8日下午,传成老树白茶巡回中国公益品鉴会第七十站,走进福州马尾区东方名城传成老树白茶文化馆. 本次品鉴会活动以“感恩母亲节”为主题,以马尾船政文化为背景,邀福州市民一起品鉴白茶,感受中国茶文化. ...
- Http与Socket小谈
http与socket是网络编程中最为重要的概念,不管是客户端还是服务端,都是最为重要的部分,以下简述两者的关系和区别(个人见解). Http 定义 基于应用层的超文本传输协议.通常承载于TCP/IP ...
- java 多态和内部类
接口跟接口之间存在继承关系 一个接口可以继承多个接口 一个非抽象类:必须实现接口中的所有方法 一个抽象类实现接口 可以不实现接口中的方法 但是继承与抽象类的类必须要是实现接口中的方法 多态:一个对 ...
- Android笔记:蓝牙
if (!BTAdapter.isEnabled()) { //没有打开,就启动确认窗口询问用户是否打开 Intent i = new Intent(BluetoothAdapter.ACTION_R ...
- JAVA 中配置IKAnalyzer扩展词库和停止词库
1.后缀名.dic的词典文件,必须如使用文档里所说的 无BOM的UTF-8编码保存的文件.如果不确定什么是 无BOM的UTF-8编码,最简单的方式就是 用Notepad++编辑器打开,Encoding ...
- 如何获取苹果手机的UDID
获取苹果手机的UDID有很多种,比如Xcode,iTunes等等吧,个人比较推荐使用iTunes,因为比较官方,而且苹果电脑自带的有,而且Windows也可以下载安装. 1.下载安装itunes(点击 ...