【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP
3790: 神奇项链
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 304 Solved: 150
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
abacada
abcdef
Sample Output
2
5
HINT
Source
Solution
用来当Manacher模板题..
Manacher算法,一种线性求解最长回文串的算法,简单好写,也好懂,详细见这里: 折越
这道题就是说,转换为多个回文串结合成一个新串,那么对目标串Manacher,对得到的回文串当做一条线段
那么这题转为"线段覆盖"CodeVS上某题,贪心或者DP搞搞就可以了,这里利用树状数组优化一下
这里的树状数组非常神奇,以前只知道树状数组能维护和,没想到可以维护后缀,做法和平常的正好相反
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 50010<<1
int n,len,mx,id,p[maxn],cnt;
char S[maxn>>],s[maxn];
struct TreeNode
{
int a[maxn];
void init() {memset(a,,sizeof(a));}
int lowbit(int x) {return x&(-x);}
int Query(int loc)
{
if (!loc) return ;
int x=0x7fffffff;
for (int i=loc; i<=n; i+=lowbit(i))
x=min(x,a[i]);
return x;
}
void Change(int loc,int D)
{
for (int i=loc; i; i-=lowbit(i))
a[i]=min(a[i],D);
}
}Tree;
void PreWork()
{
cnt=; mx=; id=;
Tree.init(); memset(p,,sizeof(p));
n=strlen(S+); len=n<<|;
s[]='$'; s[]='#'; s[len+]='%';
for (int i=; i<=n; i++)
s[i<<]=S[i],s[i<<|]='#';
}
struct HWCNode
{
int l,r;
bool operator < (const HWCNode & A) const
{return r<A.r;}
}Line[maxn];
void Manacher()
{
PreWork();
for (int i=; i<=len; i++)
{
if (mx>i) p[i]=min(p[id*-i],mx-i);
else p[i]=;
while (s[i-p[i]]==s[p[i]+i]) p[i]++;
int x=(i-p[i])/+,y=(i+p[i])/-;
if (x<=y) Line[++cnt].l=x,Line[cnt].r=y;
if (p[i]+i>mx) mx=p[i]+i,id=i;
}
}
int DP()
{
int ans=0x7fffffff;
sort(Line+,Line+cnt+);
for (int i=; i<=cnt; i++)
{
int D=Tree.Query(Line[i].l-)+;
Tree.Change(Line[i].r,D);
if (Line[i].r==n) ans=min(ans,D);
}
return ans-;
}
int main()
{
while (scanf("%s",S+)!=EOF)
Manacher(),printf("%d\n",DP());
return ;
}
【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP的更多相关文章
- BZOJ 3790: 神奇项链 [Manacher 贪心]
3790: 神奇项链 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 405 Solved: 200[Submit][Status][Discuss] ...
- bzoj 2131 : 免费的馅饼 (树状数组优化dp)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2131 思路: 题目给出了每个馅饼的下落时间t,和位置p,以及价值v,我们可以得到如下状态 ...
- HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)
题目链接 2017 CCPC Harbin Problem K 题意 给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...
- Codeforces 946G Almost Increasing Array (树状数组优化DP)
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
- LUOGU P2344 奶牛抗议 (树状数组优化dp)
传送门 解题思路 树状数组优化dp,f[i]表示前i个奶牛的分组的个数,那么很容易得出$f[i]=\sum\limits_{1\leq j\leq i}f[j-1]*(sum[i]\ge sum[j- ...
- 【题解】Music Festival(树状数组优化dp)
[题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
- BZOJ 3790 神奇项链(manacher+DP+树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3790 [题目大意] 问最少用几个回文串可以构成给出串,重叠部分可以合并 [题解] 我们 ...
- 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...
随机推荐
- mysql中判断记录是否存在方法比较
我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是 ...
- squid代理服务器根据代理IP路由
import os ips = os.popen("""ifconfig |grep 'inet addr:'|awk '{print $2}'| sed '$d'| s ...
- 50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
UPDATE tblscore SET tblscore.Score= ( -- 这里开始算叶平的平均值 SELECT AVG(tt.aa) FROM ( SELECT tblscore.Score ...
- 内网机(无网络安装 .NET Core win开发环境
1.安装 vs2015 update3 2.按顺序安装以下包 DotNetCore.1.0.0-SDK.Preview2-x64.exe aspnetcoremodule_x64_en_rc2_14. ...
- 使用Redis做预定库存缓存功能
最近在自己的工作中,把其中一个PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了库存维护功能.缓存是在业务层做的,准确讲应该是在MVC模型中Model的O ...
- HTML5+JS 《五子飞》游戏实现(三)页面和棋盘棋子
前面两节,我们已经对<五子飞>有个初步的认识,对走棋路线也有了基本的了解,现在里沃特继续跟大家分享HTML页面,另外把棋盘棋子也画出来. 演示地址:http://www.lyout.com ...
- 系统升级日记(3)- 升级SharePoint解决方案和Infopath
最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...
- doc2vec使用说明(一)gensim工具包TaggedLineDocument
gensim 是处理文本的很强大的工具包,基于python环境下: 1.gensim可以做什么? 它可以完成的任务,参加gensim 主页API中给出的介绍,链接如下: http://radimreh ...
- js对象学习
1. 属性类型 数据属性 ①Configurable 表示能否通过delete删除属性,默认值true ②Enumerable 表示能否通过for-in循环访问属性,默认值true ③Writable ...
- mybatis和ibatis控制台打印sql语句方法
#将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句 log4j.rootLogger=debug,stdout,logfile### 把日志信息输出到控制 ...