题目分析: 题目要求前后缀相同,把串反过来之后是一个很明显的卷积的形式.这样我们可以完成初步判断(即可以知道哪些必然不行). 然后考虑一下虽然卷积结果成立,但是存在问号冲突的情况. 箭头之间应当不存在1.不然就和图上所画的一样.注意到它每隔len个跳一次,所以相当于调和级数,利用原有信息判断即可. 字符串转化的方式有很多种. 代码: #include<bits/stdc++.h> using namespace std; <<)+; ; ; char str[maxn]; ],b[…
loj description 给你一个只有01和?的字符串,问你是否存在一种把?改成01的方案使串存在一个长度为\(1-n\)的\(border\).\(n\le5\times10^5\) sol 这种题都不会我还是太菜了. 有一档部分分是"01的个数不超过\(5000\)".这个其实对正解的提示是蛮大的. 有一个显然的结论:存在一个长度为\(len\)的\(border\)当且仅当对于\(\forall i\in[1,len]\) 有 \(s[i]=s[n-len+i]\).(感谢…
给定一个01?串,对所有len询问是否存在一种填法使存在长度为len的border. 首先有个套路的性质:对于一个长度为len的border,这个字符串一定有长度为n-len的循环节(最后可以不完整). 逆推得到,如果有一个0位置和一个1位置之差为len,则所有len的因数k的n-k都不可能成为border. 先将b翻转,作差卷起来,然后$O(n\log n)$枚举倍数即可. $A(x)=x^{n-1}A(\frac 1x)$是作差卷积的本质. #include<cstdio> #includ…
BZOJ5372: [Pkusc2018]神仙的游戏 https://lydsy.com/JudgeOnline/problem.php?id=5372 分析: 如果\(len\)为\(border\),那么\(n-len\)为周期,问题转化为周期. 我们知道如果\(len\)不是周期,那么其约数\(d\)也不是周期. 然后我们发现如果求周期的话,\(?\)是无意义的. 一个\(?\)不合法(同时有两个字符)的条件是\(0\rightarrow?\;\; ?\rightarrow? ... ?\…
传送门 Sol 自己还是太 \(naive\) 了,上来就构造多项式和通配符直接匹配,然后遇到 \(border\) 相交的时候就 \(gg\) 了 神仙的游戏蒟蒻还是玩不来 一个小小的性质: 存在长度为 \(len\) 的 \(border\) 的充要条件是 \(\forall i,s_i=s_{n-len+i}\) 等价于按照 \(n-len\) 的剩余系分类,那么每一类都要求不同时含有 \(0,1\) 考虑两个位置 \(i,j\) 分别为 \(0,1\) 会对于哪一些长度的 \(borde…
Description 小D和小H是两位神仙.他们经常在一起玩神仙才会玩的一些游戏,比如"口算一个4位数是不是完全平方数". 今天他们发现了一种新的游戏:首先称s长度为len的前缀成为border当且仅当 s[1-len]=s[|s|-len+1-|s|]. 给出一个由01?组成的字符串s,将s中的问号用变成01替换,对每个len口算是否存在替换问号的方案使得s长度为len的前缀成为border, 把这个结果记做f(len)∈{0,1}.f(len)=1如果s长度为len的前缀能够成为…
传送门 好妙蛙 即串\(s\)长度为\(n\)首先考虑如果一个长度为\(len\)的\(border\)存在,当且仅当对所有\(i\in[1,len],s[i]=s[n-len+i]\),也就是所有模\(n-len\)同余的所有位置上的字符要相同,如果存在一对(0,1),他们之间的下标之差为\(x\),则对于所有的\(y|x\),长度为\(n-y\)的\(border\)不存在 所以暴力做法是枚举所有确定的(0,1)对,然后把所有得到的长度以及这些长度的因数全部标记,利用质因数分解统计答案可以做…
题目 画一画就会发现一些奇诡的性质 首先如果\(len\)为一个\(\operatorname{border}\),那么必然对于\(\forall i\in [1,len]\),都会有\(s_i=s_{n-len+i}\) 我们大力扩展一下这个性质,发现当\(len\)为一个\(\operatorname{border}\)时,我们把这个整个字符串按照\(n-len\)来分段,每一段都是完全相等的,最后的不完整的一段也肯定是之前的某一个前缀 换句话说,任取\(i,j\)在\(\operatorn…
首先有一个想法,翻转串后直接卷积看有没有0匹配上1.但这是必要而不充分的因为在原串和翻转串中?不能同时取两个值. 先有一些结论: 如果s中长度为len的前缀是border,那么其存在|s|-len的循环节(最后一段不一定完整). 如果已知len不是s的循环节,那么显然len的因子也不是s的循环节. 如果位置差为len的两个位置无法匹配,那么len不是s的循环节. 于是可得:如果位置差为len的两个位置无法匹配,那么长度为|s|-(len的因子)的前缀不是border. 可以发现其实问号出现冲突的…
[LOJ6436][PKUSC2018]神仙的游戏(NTT) 题面 LOJ 题解 看到\(zsy\)从\(PKUSC\)回来就秒掉了这种神仙题 吓得我也赶快看了看\(PKUSC\)都有些什么神仙题 然后就找到了这样一道神仙题 考虑一个奇怪的暴力: 我们只需要对于\(0/1\)进行匹配 如果出现了\(0/1\)匹配的情况,那么当前长度一定不能构成\(border\) 的确,这样子肯定是对的, 但是我们似乎有一些奇怪的情况没有考虑清楚 如果两个串出现了交集,似乎不能构成\(border\)的情况就会…