洛谷2375 NOI2014动物园(KMP)】的更多相关文章

题目链接: 题目. 简单一点来说,这个题就是求一个字符串的\(num\)数组的和,其中有\(num[i]\)表示1~i中有多少个不交叉的相等的前缀和后缀 的数目,要求一个\(O(n)\)的做法 QwQ 感觉一看到这个题,其实没什么思路呀 从\(KMP\)的角度出发,对于一个\(i\)来说,显然\(pre[i],pre[pre[i]]\)都是他的后缀,所以,我们貌似可以维护一个\(num1\)表示,可以交叉的 相等的 前缀和后缀的数目 比较容易推出\(num1[i]=num1[pre[i]]+1\…
洛谷P2375:https://www.luogu.org/problemnew/show/P2375 思路 这道题可以说是完全刷新了本蒟蒻对KMP的理解 感觉对next数组的理解上升到一个新的高度 首先题目给出了next数组的定义 关于整个字串 next[len]为前缀与后缀相同的最长长度 我们给出一张从你谷题解中扒下来的图 我们可以观察到对于整个长度为len的字串a next[len],next[next[len]],next[next[next[len]]]...全部都是满足前缀与后缀相同…
洛谷题目链接:[NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:"对于一个字符串 \(S\) ,它的长度为 \(L\) .我们可以在 \(O(L)\) 的时间内,求出一个名为next的数组.有谁预习了next数组的含义吗?" 熊猫:"对于字符串 \(S\) 的前 \(…
P2375 [NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:"对于一个字符串\(S\),它的长度为\(L\).我们可以在\(O(L)\)的时间内,求出一个名为next的数组.有谁预习了next数组的含义吗?" 熊猫:"对于字符串\(S\)的前\(i\)个字符构成的子…
    一开始的方向应该对了,但是没有想到合理的优化还是没写出来…… 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串\(S\),它的长度为\(L\).我们可以在\(O(L)\)的时间内,求出一个名为\(next\)的数组.有谁预习了\(next\)数组的含义吗?” 熊猫:“对于字符串\(S\)…
题目传送门 解题思路: 其实对于一个sum[i],其值就等于sum[next[i]] + sum[next[next[i]]] + ... + 1,然后我们可以记忆化,然后题目里又有一个限制,就是前后缀不能重合,那我们就找到最大但是不重合的那种情况,然后往小了枚举就好了.最后答案说要取模,所以不要忘了%%%ljx_xhy_yyq(排名无先后). AC代码: #include<iostream> #include<cstdio> #include<cstring> #de…
题目链接 洛谷链接 我们发现题目要我们求的num[i]东西本质上其实是 求有多少以i结尾的非前缀且能与前缀匹配的字符串,而且要求字符串长度小于(i/2) 我们先不考虑字符串长度的限制,看所有以i结尾的非前缀且能与前缀匹配的字符串如何计数 考虑到KMP算法的next数组求解的过程,大家应该都想到i结尾的非前缀且能与前缀匹配的字符串的总数就是next[i]跳到0的所跳的次数 为什么是这样的呢? 如上图所示,其中绿色的串与红色的串是匹配的,若还要寻找匹配的串 不难发现所有以红色结尾处结尾所能匹配的串都…
https://www.lydsy.com/JudgeOnline/problem.php?id=3670 https://www.luogu.org/problemnew/show/P2375#sub http://uoj.ac/problem/5 我已经懒得吐槽我有多笨了…… 题目明示先求nxt数组绝对没错. 那么不难发现,当我们不考虑重合的时候,nxt[i]是一个合法的前后缀,同时nxt[nxt[i]]也是(画个图就明白了)……以此类推. 于是num数组统计如此递归下去的nxt的个数和,显…
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法. 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有谁预习了next数组的含义吗?” 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i].…
求这玩意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i] 对1,000,000,007取模的结果 n≤5,L≤1,000,000 发现$num[i]$有和$fail[i]$类似的递增性质,$num[i]<num[i-1]+1$ 然后$KMP$之后$fail$递推出$sum[i]$为$i$的$fail$祖先有几个 再类似求$fail$的过程求一遍$num$,只是多了判断$2*j \le i$,用$sum[j]$更新答…