Hrbust 2363 Symmys (Manacher + DP)
题目链接 Hrbust 2363
来源 “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 Problem J
题意 给出一个长度为$1e6$的字符串,求最小可重回文子串覆盖数量
首先Manacher预处理出以$s[i]$为首字母的回文子串的长度的最大值
然后求出包含$s[i]$的回文子串的能延伸到的最左端的位置
DP即可
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 2e6 + 10; char a[N], s[N];
int dp[N], c[N], d[N], f[N], g[N];
int T, n, m, r, p, cnt, ans, now, ca = 0;
vector <int> v[N]; void up(int &x, int y){ if (x < y) x = y;} int main(){ scanf("%d", &T);
while (T--){
scanf("%s", a + 1);
n = strlen(a + 1);
rep(i, 1, n) s[i << 1] = a[i], s[i << 1 | 1] = '#';
s[0] = '$', s[1] = '#', s[m = (n + 1) << 1] = '@';
r = 0, p = 0, f[1] = 1;
rep(i, 2, m - 1){
for (f[i] = r > i ? min(r - i, f[p * 2 - i]) : 1; s[i - f[i]] == s[i + f[i]]; f[i]++);
if (i + f[i] > r) r = i + f[i], p = i;
} rep(i, 0, m) g[i] = 0;
rep(i, 2, m - 1) up(g[i - f[i] + 1], i + 1);
rep(i, 1, m) up(g[i], g[i - 1]);
ans = 0; cnt = 0;
for (int i = 2; i < m; i += 2){
++cnt;
c[cnt] = g[i] - i;
} rep(i, 1, n) c[i] = i + c[i] - 1;
rep(i, 1, n) d[i] = i;
rep(i, 1, n) d[c[i]] = min(d[c[i]], i);
dec(i, n - 1, 1) d[i] = min(d[i], d[i + 1]);
rep(i, 0, n + 1) dp[i] = 1e9; dp[0] = 0;
rep(i, 1, n) dp[i] = min(dp[i], dp[d[i] - 1] + 1);
printf("Case #%d: %d\n", ++ca, dp[n]);
} return 0;
}
Hrbust 2363 Symmys (Manacher + DP)的更多相关文章
- 1089 最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa ...
- ACdreamOJ 1154 Lowbit Sum (数字dp)
ACdreamOJ 1154 Lowbit Sum (数位dp) ACM 题目地址:pid=1154" target="_blank" style="color ...
- 「SDOI2016」储能表(数位dp)
「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...
- 【HDU1693】Eat the Trees(插头dp)
[HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...
- 【BZOJ1814】Ural 1519 Formula 1 (插头dp)
[BZOJ1814]Ural 1519 Formula 1 (插头dp) 题面 BZOJ Vjudge 题解 戳这里 上面那个链接里面写的非常好啦. 然后说几个点吧. 首先是关于为什么只需要考虑三进制 ...
- 【BZOJ4712】洪水(动态dp)
[BZOJ4712]洪水(动态dp) 题面 BZOJ 然而是权限题QwQ,所以粘过来算了. Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开 ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- 【POJ2411】Mondriaan's Dream(轮廓线DP)
[POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...
- 51Nod 1089:最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaa ...
随机推荐
- Centos7和Centos6防火墙开放端口配置方法(避坑教学)
▲这篇文章主要为大家详细介绍了Centos7防火墙开放端口的快速方法,感兴趣的小伙伴们可以参考一下! 一.CentOS 7快速开放端口: CentOS升级到7之后,发现无法使用iptables控制Li ...
- OpenCV学习笔记(五) 文件存取
转自输入输出XML和YAML文件 To be filled
- Nodejs-非阻塞I/O&事件驱动
1.关于es6变量 const 定义常量,不会发生改变的就用这个 let 定义局部变量 如: const fs=require('fs');//require()表示载入这个模块 function a ...
- 通过Gradle Plugin实现Git Hooks检测机制
背景 项目组多人协作进行项目开发时,经常遇到如下情况:如Git Commit信息混乱,又如提交者信息用了自己非公司的私人邮箱等等.因此,有必要在Git操作过程中的适当时间点上,进行必要的如统一规范.安 ...
- laravel5.2总结--blade模板
## 1.基本用法 ``` ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div ...
- 输出1到最大的N位数 【微软面试100题 第六十五题】
题目要求: 输入数字n,按顺序输出从1到最大的n位10进制数. 例如,输入3,则输出1.2.3....999(最大的3位数). 参考资料:剑指offer第12题. 题目分析: 如果我们在数字前面补0的 ...
- SSH的基本操作
一. 登陆SSH远程控制服务器 我们以192.168.100.42服务器为例. SSH乱码: LANG="zh_CN.GB18030" export LANG=zh_CN.gb23 ...
- BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路
BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...
- sed处理大txt文件(1G) 比如替换某一串字符串,或者删除一行
1.将11.sql文件中"prompt"替换为"--prompt",然后保存为111.sql文件 sed -e "s,prompt,--prompt, ...
- CodeForces Round #521 (Div.3) A. Frog Jumping
http://codeforces.com/contest/1077/problem/A A frog is currently at the point 00 on a coordinate axi ...