【BZOJ3790】神奇项链(manacher,树状数组)
题意:
思路:生成一些回文拼起来使生成的段数最小
显然存在一种最优的方案,使生成的那些回文是目标串的极长回文子串
求出对于每个位置的最长回文子串,问题就转化成了:
给定一些已知起始和终止位置的线段,求覆盖住整个区域的最小线段数量
这个可以BIT做,求当前已经覆盖的区域最远能拓展到哪里
也可以预处理一下前缀最小值,跳转时直接调用即可
- const oo=;
- var t,a,x,y,p:array[..]of longint;
- len,n,i,id,mx,ans,m:longint;
- ch:ansistring;
- function lowbit(x:longint):longint;
- begin
- exit(x and (-x));
- end;
- function max(x,y:longint):longint;
- begin
- if x>y then exit(x);
- exit(y);
- end;
- function min(x,y:longint):longint;
- begin
- if x<y then exit(x);
- exit(y);
- end;
- procedure update(x,y:longint);
- begin
- while x<=n- do
- begin
- t[x]:=max(t[x],y);
- x:=x+lowbit(x);
- end;
- end;
- function query(x:longint):longint;
- begin
- query:=-oo;
- while x> do
- begin
- query:=max(query,t[x]);
- x:=x-lowbit(x);
- end;
- end;
- begin
- assign(input,'bzoj3790.in'); reset(input);
- assign(output,'bzoj3790.out'); rewrite(output);
- while not eof do
- begin
- readln(ch);
- len:=length(ch);
- if len= then break;
- fillchar(a,sizeof(a),);
- fillchar(p,sizeof(p),);
- n:=; a[]:=; a[]:=;
- for i:= to len do
- begin
- inc(n); a[n]:=ord(ch[i])-ord('a')+;
- inc(n); a[n]:=;
- end;
- inc(n); a[n]:=;
- mx:=; id:=;
- for i:= to n- do
- begin
- if mx>i then p[i]:=min(p[id*-i],mx-i)
- else p[i]:=;
- while a[i-p[i]]=a[i+p[i]] do inc(p[i]);
- if p[i]+i>mx then
- begin
- mx:=p[i]+i; id:=i;
- end;
- end;
- for i:= to m do
- begin
- x[i]:=; y[i]:=;
- end;
- m:=;
- for i:= to n- do
- begin
- inc(m); x[m]:=i-p[i]; y[m]:=i+p[i]-;
- end;
- fillchar(t,sizeof(t),);
- for i:= to m do update(x[i],y[i]);
- i:=; ans:=;
- while i<n- do
- begin
- i:=query(i+);
- inc(ans);
- end;
- writeln(ans-);
- end;
- close(input);
- close(output);
- end.
【BZOJ3790】神奇项链(manacher,树状数组)的更多相关文章
- 【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP
3790: 神奇项链 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 304 Solved: 150[Submit][Status][Discuss] ...
- 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- hdu6230 Palindrome(manacher+树状数组)
题目链接: Palindrome Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Other ...
- 【bzoj2565】最长双回文串 Manacher+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6802558.html 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc ...
- P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- HDU 6230 Palindrome ( Manacher && 树状数组)
题意 : 给定一个字符串S,问你有多少长度为 n 的子串满足 S[i]=S[2n−i]=S[2n+i−2] (1≤i≤n) 参考自 ==> 博客 分析 : 可以看出满足题目要求的特殊回文子串其 ...
- 洛谷P1972 [SDOI2009]HH的项链(树状数组)
题目链接: https://www.luogu.org/problemnew/show/P1972 题目描述: HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后 ...
- 【洛谷P1972】HH的项链 离线+树状数组
题目大意:静态查询序列区间颜色数. 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献.对于每个下标,记录下在这个下标之前,且距离 ...
- [BZOJ1878][SDOI2009] HH的项链 (树状数组)
link 一道简单题. 不用可持久化. 对于统计颜色个数,可以看与其颜色一样的前一个位置. 设$las(i)$表示其与$i$颜色相等的上一个位置. 则对于二元组$(l,r)$,其答案为$\sum_{i ...
随机推荐
- Elementui tabs组件内添加组件
1. Elementui tabs组件内添加组件 1.1. 需求 今天的一个需求是在后台框架的基础上添加tab页,结果页面如下 原本上述红框内的内容是不存在的,直接点击左侧菜单栏进行页面跳转,现加了t ...
- Java多线程(一) Thread和 Runnable
http://www.cnblogs.com/lwbqqyumidi/p/3804883.html 1.继承Thread 2.实现Runnable接口 public class MyRunnable ...
- JS 实现PDF文件打印
function PdfPrint() { bdhtml = window.document.body.innerHTML; sprnstr = "<!-- ...
- [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator
Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...
- Manacher HDOJ 3068 最长回文
题目传送门 关于求解最长回文子串,有dp做法,也有同样n^2的但只用O(1)的空间,还有KMP,后缀数组?? int main(void) { ) == ) { ); memset (dp, fals ...
- DFS POJ 3087 Shuffle'm Up
题目传送门 /* 题意:两块扑克牌按照顺序叠起来后,把下半部分给第一块,上半部给第二块,一直持续下去,直到叠成指定的样子 DFS:直接模拟搜索,用map记录该字符串是否被搜过.读懂题目是关键. */ ...
- 数学 HDOJ 5301 Buildings
题目传送门 /* 题意:n*m列的矩阵,删除一个格子x,y.用矩形来填充矩阵.且矩形至少有一边是在矩阵的边缘上. 求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小. 分析:任何矩形 ...
- 改变默认选择前1000行,编辑前200行【MSSQL】
- 获取Spring容器中的Bean协助调试
在使用Spring进行开发时,有时调bug真的是很伤脑筋的一件事,我们可以通过自定义一个监听器来获取Spring容器中的Bean实例来协助我们调试. 第一步:编写自定义监听器 /** * 监听serv ...
- C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB6006: “CL.exe”已退出,代码为 -1073741515。
解决: Add this to your PATH environment variables: C:\Program Files (x86)\Microsoft Visual Studio 11.0 ...