观察发现,这道题目其实就相当于一个最小区间覆盖问题
这里的区间是指以每个点为中心的最长回文串
很久没写manacher,有点感动
不得不说manacher是一个非常好的算法

 var s:array[..] of char;
c,l,r,f,p:array[..] of longint;
i,j,t,n,m,ans,k,right:longint;
ch:char; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; procedure sort(ll,rr: longint);
var i,j,x,y: longint;
begin
i:=ll;
j:=rr;
x:=r[(ll+rr) shr ];
y:=l[(ll+rr) shr ];
repeat
while (r[i]<x) or (r[i]=x) and (l[i]<y) do inc(i);
while (x<r[j]) or (r[j]=x) and (y<l[j]) do dec(j);
if not(i>j) then
begin
swap(r[i],r[j]);
swap(l[i],l[j]);
inc(i);
j:=j-;
end;
until i>j;
if ll<j then sort(ll,j);
if i<rr then sort(i,rr);
end; function ask(x:longint):longint;
begin
if x= then exit();
ask:=n+;
while x<=n do //因为求的是后缀最小值,事实上只要将查询和修改的范围换一下即可
begin
ask:=min(ask,c[x]);
x:=x+lowbit(x);
end;
end; procedure add(i:longint);
var x:longint;
begin
x:=r[i];
while x> do
begin
c[x]:=min(c[x],f[i]);
x:=x-lowbit(x);
end;
end; begin
while true do
begin
read(ch);
if not((ch>='a') and (ch<='z')) then break;
s[]:='$';
s[]:='#';
m:=;
n:=;
while (ch>='a') and (ch<='z') do
begin
inc(n);
inc(m);
s[m]:=ch;
inc(m);
s[m]:='#'; //将回文串的奇偶转化为一种情况
read(ch);
end;
s[m+]:=' ';
readln;
k:=;
right:=;
t:=;
fillchar(p,sizeof(p),);
for i:= to m do
begin
if right>i then //manacher的核心
p[i]:=min(p[*k-i],right-i)
else p[i]:=;
while s[i+p[i]]=s[i-p[i]] do inc(p[i]);
if p[i]+i>right then
begin
right:=p[i]+i;
k:=i;
end;
if (s[i]='#') and (p[i]=) then continue
else begin
inc(t);
l[t]:=(i-p[i]+) div ;
r[t]:=(i+p[i]-) div ;
end;
end;
sort(,t); //解决区间覆盖问题,右端点排序
ans:=n;
for i:= to n do
c[i]:=n+;
for i:= to t do
begin
f[i]:=ask(l[i]-)+; //以前这个问题我都是用单调队列的,这里写了树状数组,更简明
if r[i]=n then ans:=min(ans,f[i]);
add(i);
end;
writeln(ans-);
end;
end.

bzoj3790的更多相关文章

  1. 【BZOJ3790】神奇项链 Manacher+贪心

    [BZOJ3790]神奇项链 Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色.为了制作这个项链,小 H ...

  2. 【BZOJ3790】神奇项链(manacher,树状数组)

    题意: 思路:生成一些回文拼起来使生成的段数最小 显然存在一种最优的方案,使生成的那些回文是目标串的极长回文子串 求出对于每个位置的最长回文子串,问题就转化成了: 给定一些已知起始和终止位置的线段,求 ...

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

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

  4. BZOJ3790 : 神奇项链

    Manacher求出所有极长回文子串后,得到一堆线段,转化成线段覆盖问题 预处理出g[i]表示左端点不超过i的右端点的最大值 贪心地线段覆盖即可 时间复杂度$O(n)$ #include<cst ...

  5. BZOJ3790神奇项链——manacher+贪心

    题目描述 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色.为了制作这个项链,小 H 购买了两个机器.第一个机器可以生成所有形式 ...

  6. BZOJ3790:神奇项链(Manacher)

    Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色.为了制作这个项链,小 H 购买了两个机器.第一个机器可 ...

  7. BZOJ3790:神奇项链

    浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html 题目传送门:https://lydsy.com/JudgeOnline/pro ...

  8. bzoj3790 manacher算法+贪心

    紧跟jk大佬的步伐 这道题哇 因为机器一能生成回文串 所以我们只要用manacher跑一遍求出q[i]这样就把问题转化成了类似线段覆盖的题目 贪心就好了 至于,BIT优化dp我不会所以直接贪心了 注意 ...

  9. manacher(马拉车)算法详解+例题一道【bzoj3790】【神奇项链】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=39091399 (CSDN好像有bug,不知道为什 ...

随机推荐

  1. 卸载RedHat7自带的yum,安装并使用网易163源

    由于redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,安装CentOS yum工具,再配置其他源,以下为详细过程: 删除redhat原有的yu ...

  2. JavaScript的DOM操作(二)

    一:window.history对象 历史记录,通过历史记录可以操作页面前进或者后退 window.history.back();后退 window.history.forward();前进 wind ...

  3. jquery插件下载地址

    以下是本人收集的jquery插件下载地址: .............版本自行选择. jquery官网:http://jquery.com/ jquery.validate.js 官网下载地址:htt ...

  4. java.io.EOFException错误

    TOmcat启动后报:IOException while loading persisted sessions: Java.io.EOFException错误 - IOException while ...

  5. JavaScript+DOM编程艺术【读书笔记】

    第四章笔记: 如何让一个a标签不跳转: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www. ...

  6. Java-Junit 的Hello world

    这里介绍junit 4的基本配置: <1>建立一个java project项目. <2>在src目录下面建一个包,com.sun.junit4,在包下面写一点文件T.java ...

  7. 前台研发工具Sublime

    沟通交流群 [极客Online : 546653637] 欢迎您! 今天一个朋友@我,问有没有好的IDE推荐一下,其实现在有很多文本工具可供选择,像Nodepad++.Editplus之类的,之前我使 ...

  8. [功能帮助类] 最新的Functions 类 (转载)

    代码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptogr ...

  9. MySQL 连接数据库

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格),缺点:密码显示在显示器上,容易泄露. C:\>mysql -h localho ...

  10. ios动力特效,最重要的一点 属性保持(写了动力特效但是没效果的原因就在这里)

    @property (nonatomic, strong) UIDynamicItemBehavior *square1PropertiesBehavior; @property (nonatomic ...