摘要: 嘟嘟嘟 题目大意:给一个数x,让你求这样一个最长的序列,以及最长的序列的种数: 1.第0项为1,最后一项为x(序列长度不算这两项)。 2.每一项都是x的因子。 3.对于任意的ai和ai+1,ai < ai+1且ai | ai+1。 每一项都是x的因子,那么先把x分解质因数,用这些数凑成的数一定都是x 阅读全文
posted @ 2018-10-11 19:14 mrclr 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 题中让求相交的回文串的对数,不太好求。不过求不相交的回文串对数就简单多了。 因为对于一位 i,在这一位不相交的回文串对数numi = 以这一位结束的回文串个数 ×在这一位后面开始的回文串个数。用manacher跑一遍 + 差分,然后维护一个开始的回文串的后缀和就好了。 然后统计回文串个数su 阅读全文
posted @ 2018-10-11 17:01 mrclr 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 这道题,我的大致思想是先用manacher求出所有回文串,然后用刚好拼接在一起的两个回文串的总长的最大值更新答案。 manacher是O(n)的,但是暴力的枚举回文中心能达到O(n2),所以得想办法优化枚举。 令pre[i]表示离 i最远且左半部分包含 i 的回文串的回文中心的位置,suf[ 阅读全文
posted @ 2018-10-11 14:07 mrclr 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 manacher算法能在O(n)时间内解决有关回文串的问题,而且算法本身也不长,noip前学学也无妨(虽然不太感觉能考)。 算法流程: 首先为了避免奇偶讨论我们在整个串前面添加一个字符‘@’,再整个串后面添加一个和 ‘@’不一样的字符(比如‘%’),然后每两个字符之间添加一个‘#’,比如aa 阅读全文
posted @ 2018-10-11 11:18 mrclr 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 嘟嘟嘟 首先这就是一道AC自动机板儿题。 可能有重复的模板串情况,所以我每一个节点开一个vector,记录是第几个模板串的结尾。 对于主串,如果不是大写字母,就都默认是第26条出边('A' ~ 'Z' : 0 ~ 25)。 最后也是最重要的:题面不告诉你有多组数据。 1 #include<cstdi 阅读全文
posted @ 2018-10-11 09:42 mrclr 阅读(221) 评论(0) 推荐(0) 编辑