【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个字符串 对于每一个询问字符串 你需要在 ...
随机推荐
- Why is 'x' in ('x',) faster than 'x' == 'x'?
Question: >>> timeit.timeit("'x' in ('x',)") 0.04869917374131205 >>> tim ...
- 【读书笔记】iOS-设计简单的Frenzic式益智游戏
如果你决定用UIView动画或Core Animation,一定要编写一些测试用例,模拟游戏可能遇到的要求最高的动画,另外不要忘记播放声音.不要等到最后才增加声音,因为在iPhone上播放音乐和音效确 ...
- 性能测试 Apache参数配置与性能调优
Apache性能调优 by:授客 QQ:1033553122 环境: Apache 2.4 1.选择合适的MPM(Multi -Processing Modules, 多处理模块) Unix/Linu ...
- Angular 2基础(一) 环境搭建
Angular2是一款开源JavaScript库,由Google维护,用来创建页面应用程序.正式发布于2016年9月,基于ES6开发. 一.准备工作 使用Angular2开发,需要预先做一些配置上的配 ...
- Five Android layouts
线性布局: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:an ...
- python之with语句的原理
首发时间:2018-02-23 15:28 之前看到一篇博客说博主python面试时遇到面试官提问with的原理,而那位博主的博文没有提及with原理,故有此文. 关于with语句,官方文档中是这样描 ...
- Scrum敏捷开发沉思录
计算机科学的诞生,是世人为了用数字手段解决实际生活中的问题.随着时代的发展,技术的进步,人们对于现实世界中的问题理解越来越深刻,描述也越来越抽象,于是对计算机软件的需求也越来越高,越来越复杂,变化也越 ...
- TensorFlow实现梯度下降
# -*- coding: utf-8 -*- """ Created on Mon Oct 15 17:38:39 2018 @author: zhen "& ...
- Excel快捷键大全 Excel2013/2010/2007/2003常用快捷键大全
一个软件最大的用处是提高工作效率,衡量一个软件的好坏,除了是否出名之外,最主就是能否让一个新手更快的学会这个软件和提高工作速度.就拿Excel表格来说吧,平常办公中我们经常会用它来制作表格,统计数据或 ...
- 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【一】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...