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. 利用批处理文件删除系统托盘上的图标(适用于Windows各个版本)

    对于我这种强迫症患者来说,如果我已经删除了一些软件,但是系统托盘里面还有它,我会很难受.所以,没办法,必须想办法把它清除掉,还自己一片安宁!!!不知各位是否遇到过和我一样的问题,下面贴一段批处理文件的 ...

  2. tomcat启动时卡住

    tomcat启动时卡住 进入jdk/jre/lib/security/java.security文件 找到securerandom.source将这一行隐藏 并在下面一行加入securerandom. ...

  3. polyfill-eventsource added missing EventSource to window ie浏览器 解决方案

    今天遇到一个 ie浏览器显示空白,报错内容是: polyfill-eventsource added missing EventSource to window的问题, import 'babel-p ...

  4. Docker 容器备份例子

    # 在 node1 执行 nginx 程序,挂载本地的目录 docker pull nginx:stable-alpine mkdir /data/html echo "hello worl ...

  5. Python 模块管理

    导入新的模块 创建一个 calculate.py 文件 print('ok') def add(x,y): return x + y def sub(x,y): return x - y 再创建一个 ...

  6. Python 获取时间

    记录下 Python 下获取时间的方法 time 模块 import time time_format = '%Y-%m-%d %X' time_current = time.strftime(tim ...

  7. mysql 中表和数据库名称不要使用 '-' 命名

    mysql 中表和数据库名称不要使用 '-' 命名 若使用这个符号,比如 my-name 做为数据库表名称 那么在 sql 中必须如下: select * from `my-name`

  8. 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现

    一,分布式事务简介 在当前互联网,大数据和人工智能的热潮中,传统企业也受到这一潮流的冲击,纷纷响应国家“互联网+”的战略号召,企业开始将越来越多的应用从公司内网迁移到云端和移动端,或者将之前孤立的IT ...

  9. Twitter基于R语言的时序数据突变检测(BreakoutDetection)

    Twitter开源的时序数据突变检测(BreakoutDetection),基于无参的E-Divisive with Medians (EDM)算法,比传统的E-Divisive算法快3.5倍以上,并 ...

  10. tkinter中frame布局控件

    frame控件 frame控件是将窗口分成好几个小模块,然后每个小模块中添加控件. 也就是将窗口合理的布局 由于和其他控件的操作基本一致,就不做注释了 import tkinter wuya = tk ...