题意:

思路:生成一些回文拼起来使生成的段数最小

显然存在一种最优的方案,使生成的那些回文是目标串的极长回文子串

求出对于每个位置的最长回文子串,问题就转化成了:

给定一些已知起始和终止位置的线段,求覆盖住整个区域的最小线段数量

这个可以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,树状数组)的更多相关文章

  1. 【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 304  Solved: 150[Submit][Status][Discuss] ...

  2. 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...

  3. BZOJ 1878: [SDOI2009]HH的项链 离线树状数组

    1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  4. hdu6230 Palindrome(manacher+树状数组)

    题目链接: Palindrome Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Other ...

  5. 【bzoj2565】最长双回文串 Manacher+树状数组

    原文地址:http://www.cnblogs.com/GXZlegend/p/6802558.html 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc ...

  6. P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  7. HDU 6230 Palindrome ( Manacher && 树状数组)

    题意 : 给定一个字符串S,问你有多少长度为 n 的子串满足  S[i]=S[2n−i]=S[2n+i−2] (1≤i≤n) 参考自 ==> 博客 分析 : 可以看出满足题目要求的特殊回文子串其 ...

  8. 洛谷P1972 [SDOI2009]HH的项链(树状数组)

    题目链接: https://www.luogu.org/problemnew/show/P1972 题目描述: HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后 ...

  9. 【洛谷P1972】HH的项链 离线+树状数组

    题目大意:静态查询序列区间颜色数. 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献.对于每个下标,记录下在这个下标之前,且距离 ...

  10. [BZOJ1878][SDOI2009] HH的项链 (树状数组)

    link 一道简单题. 不用可持久化. 对于统计颜色个数,可以看与其颜色一样的前一个位置. 设$las(i)$表示其与$i$颜色相等的上一个位置. 则对于二元组$(l,r)$,其答案为$\sum_{i ...

随机推荐

  1. ACM_Uppercase(水题)

    Uppercase Time Limit: 2000/1000ms (Java/Others) Problem Description: 给出一句中间无特殊符号的英语句子,要求将各单词的首字母改大写. ...

  2. 关于dbms_output包的使用

    General Source {ORACLE_HOME}/rdbms/admin/dbmsotpt.sql First Available 7.3.4 Data Types TYPE chararr ...

  3. struct结构的一些内容

    srtuct结构的定义: 访问修饰符 struct  结构名{ //方法体 } 结构定义的特点: 1.结构中可以有字段(属性),也可以有方法 2.定义时,结构的字段不能被赋初值 3.结构和类一样都有默 ...

  4. Android4.4以上Uri转换成绝对路径的工具类

    一.Android4.4版本以上Uri地址封装规范: content://com.android.providers.media.documents/document/image%3A659 二.An ...

  5. Scala-基础-函数(2)

    import junit.framework.TestCase //函数(2) //知识点-默认参数,带名参数,变长参数,过程 class Demo1 extends TestCase { //测试方 ...

  6. python加载不了cookirlib模块的问题

    Python 3 改成 http.cookiejar了,所以import cookielib只要改成import http.cookiejar,就可以了.

  7. sql server用SQL语句查看字段说明

    SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value] )) AS [字段说明] FROM sys.tables AS t INNER JOIN s ...

  8. Container Views

    https://developer.apple.com/documentation/uikit/views_and_controls Container Views Organize and pres ...

  9. BZOJ3124: [Sdoi2013]直径 (树形DP)

    题意:给一颗树 第一问求直径 第二问求有多少条边是所有直径都含有的 题解:求直径就不说了 解第二问需要自己摸索出一些性质 任意记录一条直径后 跑这条直径的每一个点  如果以这个点不经过直径能到达最远的 ...

  10. 【Redis】二、Redis高级特性

    (三) Redis高级特性   前面我们介绍了Redis的五种基本的数据类型,灵活运用这五种数据类型是使用Redis的基础,除此之外,Redis还有一些特性,掌握这些特性能对Redis有进一步的了解, ...