【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个字符串 对于每一个询问字符串 你需要在 ...
随机推荐
- 利用批处理文件删除系统托盘上的图标(适用于Windows各个版本)
对于我这种强迫症患者来说,如果我已经删除了一些软件,但是系统托盘里面还有它,我会很难受.所以,没办法,必须想办法把它清除掉,还自己一片安宁!!!不知各位是否遇到过和我一样的问题,下面贴一段批处理文件的 ...
- tomcat启动时卡住
tomcat启动时卡住 进入jdk/jre/lib/security/java.security文件 找到securerandom.source将这一行隐藏 并在下面一行加入securerandom. ...
- polyfill-eventsource added missing EventSource to window ie浏览器 解决方案
今天遇到一个 ie浏览器显示空白,报错内容是: polyfill-eventsource added missing EventSource to window的问题, import 'babel-p ...
- Docker 容器备份例子
# 在 node1 执行 nginx 程序,挂载本地的目录 docker pull nginx:stable-alpine mkdir /data/html echo "hello worl ...
- Python 模块管理
导入新的模块 创建一个 calculate.py 文件 print('ok') def add(x,y): return x + y def sub(x,y): return x - y 再创建一个 ...
- Python 获取时间
记录下 Python 下获取时间的方法 time 模块 import time time_format = '%Y-%m-%d %X' time_current = time.strftime(tim ...
- mysql 中表和数据库名称不要使用 '-' 命名
mysql 中表和数据库名称不要使用 '-' 命名 若使用这个符号,比如 my-name 做为数据库表名称 那么在 sql 中必须如下: select * from `my-name`
- 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现
一,分布式事务简介 在当前互联网,大数据和人工智能的热潮中,传统企业也受到这一潮流的冲击,纷纷响应国家“互联网+”的战略号召,企业开始将越来越多的应用从公司内网迁移到云端和移动端,或者将之前孤立的IT ...
- Twitter基于R语言的时序数据突变检测(BreakoutDetection)
Twitter开源的时序数据突变检测(BreakoutDetection),基于无参的E-Divisive with Medians (EDM)算法,比传统的E-Divisive算法快3.5倍以上,并 ...
- tkinter中frame布局控件
frame控件 frame控件是将窗口分成好几个小模块,然后每个小模块中添加控件. 也就是将窗口合理的布局 由于和其他控件的操作基本一致,就不做注释了 import tkinter wuya = tk ...