二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。
「HNOI2004」L语言 - Trie
我们称一段文章 在某个字典 下是可以被理解的,是指如果文章 可以被分成若干部分,且每一个部分都是字典 中的单词。
给定一个字典 ,你的程序需要判断若干段文章在字典 下是否能够被理解。并给出其在字典 下能够被理解的最长前缀的位置。
「NOI2011」阿狸的打字机 - AC 自动机
打字机上只有 个按键,分别印有 个小写英文字母和 B
、P
两个字母。
经阿狸研究发现,这个打字机是这样工作的:
- 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。
- 按一下印有
B
的按键,打字机凹槽中最后一个字母会消失。 - 按一下印有
P
的按键,打字机会在纸上打印出凹槽中现有的所有字母并换行,但凹槽中的字母不会消失。
我们把纸上打印出来的字符串从 开始顺序编号,一直到 。打字机有一个非常有趣的功能,在打字机中暗藏一个带数字的小键盘,在小键盘上输入两个数 (其中 ),打字机会显示第 个打印的字符串在第 个打印的字符串中出现了多少次。
「JSOI2007」文本生成器 - AC 自动机
「文本生成器」可以随机生成一些文章 ―― 总是生成一篇长度固定且完全随机的文章 —— 也就是说,生成的文章中每个字节都是完全随机的。
如果一篇文章中至少包含使用者们了解的一个单词,那么我们说这篇文章是可读的(我们称文章 包含单词 ,当且仅当单词 是文章 的子串)。
求生成的所有文本中可读文本的数量。
「POI2008」BLO - 割点
Byteotia 城市有 个 towns, 条双向 roads。每条 road 连接两个不同的 towns,没有重复的 road。所有 towns 连通。
求当把每个点封锁时,会有多少有序点对 不连通。
「HNOI2012」矿场搭建 - 割点
煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。
请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。
「NOI2016」优秀的拆分 - Hash
如果一个字符串可以被拆分为 AABB
的形式,其中 和 是任意非空字符串,则我们称该字符串的这种拆分是优秀的。
例如,对于字符串 aabaabaa
,如果令 ,我们就找到了这个字符串拆分成 AABB
的一种方式。
一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。比如我们令 ,也可以用 AABB
表示出上述字符串;但是,字符串 abaabaa
就没有优秀的拆分。
现在给出一个长度为 的字符串 ,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数。