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的更多相关文章

  1. 【codeforces 797C】Minimal string

    [题目链接]:http://codeforces.com/contest/797/problem/C [题意] 一开始,给你一个字符串s:两个空字符串t和u; 你有两种合法操作; 1.将s的开头字符加 ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  4. 【codeforces 779D】String Game

    [题目链接]:http://codeforces.com/contest/779/problem/D [题意] 给你一段操作序列; 按顺序依次删掉字符串1中相应位置的字符; 问你最多能按顺序删掉多少个 ...

  5. 【codeforces 801B】Valued Keys

    [题目链接]:http://codeforces.com/contest/801/problem/B [题意] 定义一个对两个字符串x,y的f(x,y)函数; 返回的是一个字符串; 这个返回的字符串的 ...

  6. 【codeforces 801A】Vicious Keyboard

    [题目链接]:http://codeforces.com/contest/801/problem/A [题意] 一个字符串只由VK组成; 让你修改一个字符; 使得剩下的字符串里面子串VK的个数最大; ...

  7. 【codeforces 510C】Fox And Names

    [题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...

  8. 【codeforces 514A】Chewbaсca and Number

    [题目链接]:http://codeforces.com/contest/514/problem/A [题意] 允许你把每个数字翻转 ->x变成9-x 然后问你能够变成的最小的数字是什么; 不能 ...

  9. 【codeforces 514C】Watto and Mechanism(字典树做法)

    [题目链接]:http://codeforces.com/contest/514/problem/C [题意] 给你n个字符串; 然后给你m个询问;->m个字符串 对于每一个询问字符串 你需要在 ...

随机推荐

  1. 最优-scroll事件的监听实现

    1. 背景和目标 前端在监听scroll这类高频率触发事件时,常常需要一个监听函数来实现监听和回调处理.传统写法上利用setInterval或setTimeout来实现. 为了减小 CPU 开支,往往 ...

  2. hadoop的企业优化

    前言: Mapreduce程序的效率的瓶颈在于两点: 计算机性能: CPU.内存.磁盘健康.网络 I/O操作: 数据倾斜 map和reduce数量设置不合理 map的运行时间太长,导致reduc的等待 ...

  3. 在Centos下面FTP映射方案

    前两天公司要在一台Centos的机子上,把一些文件定时备份到另外一台ftp服务器上, 在Linux系统中,mount是不支持直接挂在"ftp://192.168.1.1/backup&quo ...

  4. css,响应鼠标事件,文字变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 天池新人赛-天池新人实战赛o2o优惠券使用预测(一)

    第一次参加天池新人赛,主要目的还是想考察下自己对机器学习上的成果,以及系统化的实现一下所学的东西.看看自己的掌握度如何,能否顺利的完成一个分析工作.为之后的学习奠定基础. 这次成绩并不好,只是把整个机 ...

  6. [20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt

    [20180316]为什么不使用INDEX FULL SCAN (MIN/MAX).txt --//链接:http://www.itpub.net/thread-2100456-1-1.html.自己 ...

  7. [20170623]利用传输表空间恢复数据库2.txt

    [20170623]利用传输表空间恢复数据库2.txt --//继续上午的测试,测试truncate,是否可行,理论讲应该没有问题.我主要的目的测试是否要切换日志.--//参考链接 : http:// ...

  8. python第六十五天--python操作mysql

    pymysql模块对mysql进行 import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='ro ...

  9. Linux (Fedora 28) 如何查看 CPU 温度

    机器突然负载有点高,查看CPU 温度的方法: 1.yum install lm_sensors; 2.sensors-detect 3.sensors   这些需要机器具备相应的设备,如果在虚拟机运行 ...

  10. 个人技术博客——linux服务器配置以及flask框架

    本次的软件工程实践,我负责我们组后台服务的搭建,我选用了bandwagon的服务器,安装的是Debian GNU/Linux,全程在root用户下操作,后端服务是用python的flask框架,数据库 ...