显然可以用KMP算法,时间复杂度是O(n)。 当T=S:P=SSS…S。假设S出现了R次。如果转换为ABABAB…ABABA的形式,A和B是由几个S组成,而且最后的A一定是P的一个后缀。由贪心算法,A的长度尽量小,所以A中S出现R mod Q次。B中S出现R/Q-R mod Q次。因为只需判断R/Q-R mod Q>=0即可 当T!=S:由于上一...
=S时,反之。 #include<iostream>#include<cmath>#include<cstring>#include<queue>#include<vector>#include<cstdio>#include<algorithm>#include#include<set>#definerep(i,e) for(int i=0;i<(e);i++)#definerep1(i,e) for(int i=1;i<=(e);i++)#definerepx(i,x,e) for(int i=(x);i<=(...
所以思路很明确了,构造border树,对每一个前缀,如果合法,其循环节肯定是它祖先某个节点得来,而border树上一条链的下标必然是递增,所以有一个单调关系,所以我每次找到这个前缀对应的点,然后对其祖先这条链做倍增,复杂度按理
D. Om Nom and Necklace(border树) 技术标签: c++D. Om Nom and Necklace 题意:给定一个n长的字符串和一个k。询问每个前缀是不是ABABABA这样的形式,其中B有k个,A有k+1个,AB都可以为空。 思路:先说结论吧,既然AB都可以为空,那把AB看成一个串C那就是CCCC…A,A又是C的前缀,这显然是循环节,所以...
【Henu ACM Round#16 F】Om Nom and Necklace 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀。 然后s其实就是pre[i]中的前 i+1-f[i]个字符组成的 字符串。 特殊的,t可能就是一个空串。
Codeforces 526.D Om Nom and Necklace memory limit per test 256 megabytes input standard input output standard output One day Om Nom found a thread withnbeads of different colors. He decided to cut the first several beads from this thread to make a bead necklace and present it to his girl...
首先用kmp算法可以将字符串的一个前缀划分成SSSS...ST的形式。 下面考虑如果T=S,R为有多少个S,那么每个AB的要求就是要有R/k个S,最后会余下来R%k个S,那么把余下来的这部分当作A,其余部分当作B即可,这里B可以为空串 所以条件就是R/k-R%k>0 如果...
CodeForces 526D Om Nom and Necklace Om Nom and Necklace 题意: 询问每个前缀是否能构成A + B + A + ...+ B + A这个形式。 题解: 首先要明白的是KMP求最小循环节,然后算出前面有多少个重复的串。 一个串有2种构成方式: 1. SSSSSS, 及这个串刚好是全由S构成的的,一共z个S。 需要明白的是,...
CF526D Om Nom and Necklace 题目 CF526D Om Nom and Necklace 分析 首先看到这个 ABAB...ABABAABAB...ABABA 很不舒服,可以写成 SS...SSSASS...SSSA 其中AA 是SS 的前缀即可。 然后显然这个就是个求:一个串的每一个前缀是否具有周期。 单个串判断周期我们已经会了,直接 KMPKMP 或者ZZ 函数就行,但是这...
然后s其实就是pre[i]中的前 i+1-f[i]个字符组成的 字符串。 特殊的,t可能就是一个空串。 比如abcdefg 这里f是kmp算法中的f数组 然后t有两种可能 ① t==s 这样的话,整个前缀就是 sssssss..ss了 这里有(i)/(i-f[i])个s 设为num;