【题意】

你可以产生一个回文串,也可以将两个串合并成一个串,问产生目标串需要的最少合并次数。

【思路】

  显然我们要先产生目标串中包含的极大回文字符串。

Manacher求出每个位置可以向两边延伸的最长回文串。

则题目转化为有若干条线段,求最少的线段将[1..n]覆盖。贪心DP皆可上,DP需要BIT优化一下。

【代码】

 #include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef long long ll;
const int N = 2e5+;
const int inf = 1e9; struct Node
{
int l,r;
bool operator < (const Node& rhs) const
{
return r<rhs.r;
}
} q[N];
int tot; char s[N],a[N];
int n,m,p[N]; int C[N];
void upd(int x,int v)
{
for(int i=x;i;i-=i&(-i))
C[i]=min(C[i],v);
}
int query(int x)
{
if(x==) return ;
int res=inf;
for(int i=x;i<=n;i+=i&(-i))
res=min(res,C[i]);
return res;
} void Add(int l,int r)
{
l=l/+,r=r/-;
if(l>r) return ;
q[++tot]=(Node){l,r};
}
void Manacher()
{
m=*n+;
for(int i=;i<=n;i++)
{
a[i<<]=s[i];
a[i<<|]='#';
}
a[]='+',a[m+]='-',a[]='#';
int mx=,id;
for(int i=;i<=m;i++)
{
if(mx>i) p[i]=min(mx-i,p[id*-i]);
else p[i]=;
while(a[i-p[i]]==a[i+p[i]]) p[i]++;
Add(i-p[i],i+p[i]);
if(p[i]+i>mx) mx=i+p[i],id=i;
}
} int dp()
{
int ans=inf;
sort(q+,q+tot+);
FOR(i,,tot)
{
int x=query(q[i].l-)+;
upd(q[i].r,x);
if(q[i].r==n) ans=min(ans,x);
}
return ans;
} int main()
{
while(scanf("%s",s+)==)
{
memset(p,,sizeof(p));
tot=;
n=strlen(s+);
FOR(i,,n) C[i]=inf;
Manacher();
printf("%d\n",dp()-);
}
return ;
}

bzoj 3790 神奇项链(Manacher,DP+BIT | 贪心)的更多相关文章

  1. BZOJ 3790: 神奇项链 [Manacher 贪心]

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

  2. BZOJ 3790 神奇项链 hash/后缀自动机+贪心

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

  3. BZOJ 3790 神奇项链(manacher+贪心)

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MB Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小 ...

  4. bzoj 3790: 神奇项链

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

  5. bzoj 3790 神奇项链 回文串 manacher|PAM

    LINK:神奇项链 存在两个操作:1. 一个操作可以生成所有形式的回文串 2.一个操作可以将两个串给合并起来 如果前缀和后缀相同还可以将其并起来. 多组询问 每次询问合成一个串所需最少多少次2操作. ...

  6. BZOJ 3790 神奇项链(manacher+DP+树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3790 [题目大意] 问最少用几个回文串可以构成给出串,重叠部分可以合并 [题解] 我们 ...

  7. BZOJ 3790 神奇项链(回文自动机+线段树优化DP)

    我们预处理出来以i为结尾的最长回文后缀(回文自动机的构建过程中就可以求出)然后就是一个区间覆盖,因为我懒得写贪心,就写了线段树优化的DP. #include<iostream> #incl ...

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

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

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

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

随机推荐

  1. Internet History, Technology and Security (Week 9)

    Week 9 Security: Web Security We are now on the second to last week of the class and finishing up ou ...

  2. [转帖]InfiniBand技术和协议架构分析

    InfiniBand技术和协议架构分析 2017年06月06日 20:54:16 Hardy晗狄 阅读数:15207 标签: 云计算存储Infiniband 更多 个人分类: 存储云计算   版权声明 ...

  3. 【php】new static的用法

    在一个类中,常见的是new self()操作,代表返回自身类的实例. 当父类中存在方法,然后每个子类继承于父类,调用这个方法会返回自身的实例化对象, <?php class A { functi ...

  4. 微信小程序 功能函数 购物车商品删除

    // 购物车删除 deleteList(e) { const index = e.currentTarget.dataset.index; let carts = this.data.carts; c ...

  5. SPOJ_LCS

    经典题目,求两个串的最长公共子串. 是这样来做的. 以第一个串构造SAM,第二个串在自动机上跟新一遍就可以了. 更新的过程是这样的,假设当前到达的状态点为x(初始状态为0点),下一个字符是c,如果当前 ...

  6. java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同

    java  重写你可以这么理解    因为   方法名和参数类型个数相同  所以这就是重写了    然后  因为是重写  所以  返回值必须相同

  7. Handler,Looper,HandlerThread浅析

    Handler想必在大家写Android代码过程中已经运用得炉火纯青,特别是在做阻塞操作线程到UI线程的更新上.Handler用得恰当,能防止很多多线程异常. 而Looper大家也肯定有接触过,只不过 ...

  8. Codeforces Round#509 Div.2翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  9. 用vim去掉utf-8 BOM

    '去掉utf-8 BOM :set nobomb '保留utf-8 BOM :set bomb

  10. 应该更新的Java知识之常用程序库

    摘自:http://www.blogbus.com/dreamhead-logs/226738702.html 在很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果你 ...