【Codeforces 1120C】Compress String
Codeforces 1120 C
题意:给一个串\(S\),将这个串分成\(t_1..t_m\),如果\(t_i\)在\(t_1..t_{i-1}\)中作为子串出现过,那么这个的代价是\(b\),否则如果\(|t_i|=1\),那么这个的代价是\(a\)。
问最少代价。
思路:第一次现场敲对\(Suffix\ AutoMaton\)祭
首先考虑\(dp_i\)表示处理到第\(i\)个位置,最少的代价。
然后向后枚举一个在\(S_{1..i-1}\)中出现过的子串\(S_{i..j}\),转移\(dp_{j+1}=dp_i+b\),或者\(dp_{i+1}=dp_i+a\)。
这个判断子串的过程有好几种方法:
- 用后缀自动机慢慢添加节点,然后直接按照上面的边跑看会不会
跑丢了跑到\(null\)那边去 - 做\(lcp_{i,j}\)表示从\(i\)和\(j\)开始的最长公共前缀,然后顺着这个转移。
- 把所有哈希值放到哈希表里面(这个莫名\(wa\)了。。。
- 直接暴力\(string.find\)。。。(能过!
- 。。。
其实我感觉\(C\)比\(A\)简单好多。。。
Codeforces 1120 C 分析
V--gLaSsH0ldEr593--V、Radewoosh、prof.PVH、mitterr1999、chemthan、V--o_o--V、pavel.savchenkov、kmjp、bip_oqq:
首先通过\(dp\)算出\(lcp_{i,j}=lcp_{i+1,j+1}+1\),然后根据\(max\ lcp_{i, j}\)来更新\(dp_{i+k}\)。
gskhirtladze、Benq、teja349、natsugiri、step_by_step:
通过\(Z\_Function\)算出\(lcp_{i,j}\)。其余同上。
paulll:
通过\(Suffix\ Array\)算出\(lcp_{i,j}\)。其余同上。
Sooke、nicklu0、LHiC:
通过\(Suffix\ AutoMaton\)算出原串的一个前缀\(S_{1..i}\)中有哪些子串,用于判断之前是否出现过。
_Ash__:
通过KMP算出\(lcp\)。
Atreus:
首先求出一个前缀\(S_{1..i}\)中所有子串的哈希值,然后对于\(i\)二分出最长的是前面的子串的能转移到的\(j\),然后转移。
总结:这题我明显\(Over\ Kill\)了啊。。。根本用不着后缀自动机的。。。
【Codeforces 1120C】Compress String的更多相关文章
- 【codeforces 797C】Minimal string
[题目链接]:http://codeforces.com/contest/797/problem/C [题意] 一开始,给你一个字符串s:两个空字符串t和u; 你有两种合法操作; 1.将s的开头字符加 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 779D】String Game
[题目链接]:http://codeforces.com/contest/779/problem/D [题意] 给你一段操作序列; 按顺序依次删掉字符串1中相应位置的字符; 问你最多能按顺序删掉多少个 ...
- 【codeforces 801B】Valued Keys
[题目链接]:http://codeforces.com/contest/801/problem/B [题意] 定义一个对两个字符串x,y的f(x,y)函数; 返回的是一个字符串; 这个返回的字符串的 ...
- 【codeforces 801A】Vicious Keyboard
[题目链接]:http://codeforces.com/contest/801/problem/A [题意] 一个字符串只由VK组成; 让你修改一个字符; 使得剩下的字符串里面子串VK的个数最大; ...
- 【codeforces 510C】Fox And Names
[题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...
- 【codeforces 514A】Chewbaсca and Number
[题目链接]:http://codeforces.com/contest/514/problem/A [题意] 允许你把每个数字翻转 ->x变成9-x 然后问你能够变成的最小的数字是什么; 不能 ...
- 【codeforces 514C】Watto and Mechanism(字典树做法)
[题目链接]:http://codeforces.com/contest/514/problem/C [题意] 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在 ...
随机推荐
- 最优-scroll事件的监听实现
1. 背景和目标 前端在监听scroll这类高频率触发事件时,常常需要一个监听函数来实现监听和回调处理.传统写法上利用setInterval或setTimeout来实现. 为了减小 CPU 开支,往往 ...
- hadoop的企业优化
前言: Mapreduce程序的效率的瓶颈在于两点: 计算机性能: CPU.内存.磁盘健康.网络 I/O操作: 数据倾斜 map和reduce数量设置不合理 map的运行时间太长,导致reduc的等待 ...
- 在Centos下面FTP映射方案
前两天公司要在一台Centos的机子上,把一些文件定时备份到另外一台ftp服务器上, 在Linux系统中,mount是不支持直接挂在"ftp://192.168.1.1/backup&quo ...
- css,响应鼠标事件,文字变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 天池新人赛-天池新人实战赛o2o优惠券使用预测(一)
第一次参加天池新人赛,主要目的还是想考察下自己对机器学习上的成果,以及系统化的实现一下所学的东西.看看自己的掌握度如何,能否顺利的完成一个分析工作.为之后的学习奠定基础. 这次成绩并不好,只是把整个机 ...
- [20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt
[20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt --//链接:http://www.itpub.net/thread-2100456-1-1.html.自己 ...
- [20170623]利用传输表空间恢复数据库2.txt
[20170623]利用传输表空间恢复数据库2.txt --//继续上午的测试,测试truncate,是否可行,理论讲应该没有问题.我主要的目的测试是否要切换日志.--//参考链接 : http:// ...
- python第六十五天--python操作mysql
pymysql模块对mysql进行 import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='ro ...
- Linux (Fedora 28) 如何查看 CPU 温度
机器突然负载有点高,查看CPU 温度的方法: 1.yum install lm_sensors; 2.sensors-detect 3.sensors 这些需要机器具备相应的设备,如果在虚拟机运行 ...
- 个人技术博客——linux服务器配置以及flask框架
本次的软件工程实践,我负责我们组后台服务的搭建,我选用了bandwagon的服务器,安装的是Debian GNU/Linux,全程在root用户下操作,后端服务是用python的flask框架,数据库 ...