题目描述

母亲节就要到了,小 H 准备送给她一个特殊的项链。这个项链可以看作一个用小写字
母组成的字符串,每个小写字母表示一种颜色。为了制作这个项链,小 H 购买了两个机器。第一个机器可以生成所有形式的回文串,第二个机器可以把两个回文串连接起来,而且第二个机器还有一个特殊的性质:假如一个字符串的后缀和一个字符串的前缀是完全相同的,那么可以将这个重复部分重叠。例如:aba和aca连接起来,可以生成串abaaca或 abaca。现在给出目标项链的样式,询问你需要使用第二个机器多少次才能生成这个特殊的项链。 

输入

输入数据有多行,每行一个字符串,表示目标项链的样式。 

输出

多行,每行一个答案表示最少需要使用第二个机器的次数。 

样例输入

abcdcba
abacada
abcdef

样例输出

0
2
5

提示

每个测试数据,输入不超过 5行 
每行的字符串长度小于等于 50000 
 
将每个回文串看作一个线段,那么问题就变成至少多少个线段能将区间全部覆盖。用manacher求一下以每个位置为中心的最长回文串,将其视为一个线段然后按左端点排序贪心选线段即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
char s[100010];
int len[100010];
int n;
int mx,num;
struct miku
{
int l,r;
}a[100010];
bool cmp(miku a,miku b)
{
return a.l<b.l;
}
int main()
{
while(scanf("%s",s+1)!=EOF)
{
n=strlen(s+1);
for(int i=n;i>=1;i--)
{
s[i<<1]=s[i];
s[i<<1|1]='&';
}
n=n<<1|1;
s[0]='%';
s[1]='&';
s[n+1]='^';
mx=0,num=0;
for(int i=1;i<=n;i++)
{
len[i]=mx>i?min(len[num*2-i],mx-i):1;
while(s[i+len[i]]==s[i-len[i]])
{
len[i]++;
}
if(mx<i+len[i])
{
mx=i+len[i];
num=i;
}
}
for(int i=1;i<=n;i++)
{
a[i].l=i-len[i]+1;
a[i].r=i+len[i]-1;
}
sort(a+1,a+1+n,cmp);
int r=0,ans=0,i=1;
while(i<=n)
{
int sum=0;
while(a[i].l-1<=r&&i<=n)
{
sum=max(sum,a[i].r);
i++;
}
ans++;
r=sum;
if(r==n)
{
break;
}
}
printf("%d\n",ans-1);
}
}

BZOJ3790神奇项链——manacher+贪心的更多相关文章

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

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

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

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

  3. BZOJ3790:神奇项链(Manacher)

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

  4. BZOJ_3790_神奇项链_manacher+贪心

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

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

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

  6. BZOJ3790 : 神奇项链

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

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

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

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

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

  9. 【BZOJ】【3790】神奇项链

    Manacher算法/DP 找出所有的回文串,看做是一个个线段,那么问题就转化成了用最少的线段将整个区间覆盖起来,可以重叠,那么这就是一个DP了= = Orz ZKY大爷,让蒟蒻开眼界了……头一次知道 ...

随机推荐

  1. Hibernate各种基本注解及一对一(多)关系映射采坑笔记

    hibernate提供两种方式配置关系映射,一种XMl配置,一种注解.SpringBoot已经自带了hibernate注解方式,我也是特别喜欢使用注解,特此记下常用的知识点. 1.基本注解 @Tabl ...

  2. 显式与隐式(ExplicitAndImplicit)

    显式与隐式(Explicit And Implicit) 1.概念 1.1 显式 实现的单词Explicit意思是清楚的.明确的.详述的.所以,显式的“显”是指明显且清楚的实现,相对于接口来说,就是明 ...

  3. .net core 2.1 开源项目 COMCMS dnc版本

    项目一直从dotnet core 1.1开始,升级到2.0,乃至如今2.1,以后保持继续更新. 但可能只是一个后台,前台的话,到时候看有没有好的模板. ------------无聊的分割线------ ...

  4. Mac 下编译安装 php-5.6

    1.安装 PHP 1.1 下载源码包 http://php.net/get/php-5.6.35.tar.bz2/from/a/mirror 1.2 编译&安装 ./configure --p ...

  5. NewZealand。。。

    秀个存在感...

  6. Linux常见问题汇总

    Linux问题: ifconfig查看IP地下载报错:bash: ifconfig: commandnotfound 解决方法: 先执行 export PATH="$PATH:/sbin&q ...

  7. 008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413

      008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413

  8. Python-类的组合与重用

    软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 1.继承的方式 通过继承建立了派生类与基类之间的关系,它是一种'是'的关系 ...

  9. Vladik and Complicated Book CodeForces - 811B (思维实现)

    Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...

  10. echarts x轴 增加滚动条

    charts x轴 增加滚动条 在option 配置项中添加 [ dataZoom 中配置 ] 设置x轴滚动条 效果图: 动态拖动 以下参考代码 dataZoom配置 官网写法 option = { ...