loj6436【PKUSC2018】神仙的游戏】的更多相关文章

题目分析: 题目要求前后缀相同,把串反过来之后是一个很明显的卷积的形式.这样我们可以完成初步判断(即可以知道哪些必然不行). 然后考虑一下虽然卷积结果成立,但是存在问号冲突的情况. 箭头之间应当不存在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]\).(感谢…
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)对,然后把所有得到的长度以及这些长度的因数全部标记,利用质因数分解统计答案可以做…
首先有一个想法,翻转串后直接卷积看有没有0匹配上1.但这是必要而不充分的因为在原串和翻转串中?不能同时取两个值. 先有一些结论: 如果s中长度为len的前缀是border,那么其存在|s|-len的循环节(最后一段不一定完整). 如果已知len不是s的循环节,那么显然len的因子也不是s的循环节. 如果位置差为len的两个位置无法匹配,那么len不是s的循环节. 于是可得:如果位置差为len的两个位置无法匹配,那么长度为|s|-(len的因子)的前缀不是border. 可以发现其实问号出现冲突的…
给定一个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…
题目 画一画就会发现一些奇诡的性质 首先如果\(len\)为一个\(\operatorname{border}\),那么必然对于\(\forall i\in [1,len]\),都会有\(s_i=s_{n-len+i}\) 我们大力扩展一下这个性质,发现当\(len\)为一个\(\operatorname{border}\)时,我们把这个整个字符串按照\(n-len\)来分段,每一段都是完全相等的,最后的不完整的一段也肯定是之前的某一个前缀 换句话说,任取\(i,j\)在\(\operatorn…
[LOJ6436][PKUSC2018]神仙的游戏(NTT) 题面 LOJ 题解 看到\(zsy\)从\(PKUSC\)回来就秒掉了这种神仙题 吓得我也赶快看了看\(PKUSC\)都有些什么神仙题 然后就找到了这样一道神仙题 考虑一个奇怪的暴力: 我们只需要对于\(0/1\)进行匹配 如果出现了\(0/1\)匹配的情况,那么当前长度一定不能构成\(border\) 的确,这样子肯定是对的, 但是我们似乎有一些奇怪的情况没有考虑清楚 如果两个串出现了交集,似乎不能构成\(border\)的情况就会…
题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 这样做 . 把通配符设成 \(0\) 然后 . 别的按 \(\mathrm{ASCII}\) 码 给值 , 最后把他写成式子的形式 ... 后来发现太年轻了 qwq 先要做这题 , 那么先发现性质咯 : 存在一个长度为 \(len\) 的 \(border\) 当且仅当对于 \(\forall i…
Portal --> pkuscD2T2(loj6436) Solution 个人觉得是道很好的法法塔题qwq 一开始的时候想偏了想到了另一种法法塔处理字符串匹配之类的奇怪技巧(万径人踪灭qwq了解一下),然后非常天真的想把问号拿出来单独处理一波然后越走越远... 好吧正解其实是(感觉貌似还是想的有点绕?应该有更加简便的思维方式不过qwq不管了qwq) 因为有一个问号所以其实挺难直接得到哪些长度能够匹配,那不妨换个思路把所有肯定不能匹配的长度去掉那剩下的就是答案了 肯定不能匹配的长度显然就是\(…
$|S| \le 5 \times 10^5$ 题解 这题直接用通配符匹配的套路会错,因为重复部分的$?$可能同时被当做了$0$和$1$ 有长度为$i$的公共前缀后缀等价于有长度为$n-i$的循环节: 对于循环节$d$,只需要知道对于任意的$d|i-j$,是否存在$(s[i]='0'且s[j]='1') 或 (s[j]='0'且s[i]='1')$ 构造函数:$A(x) = s[x]=='0' , B(x) = s[n-1-x]=='1' $ 可以通过计算多项式$A \times B$判断$d=…
传送门 思路 首先通过各种手玩/找规律/严谨证明,发现当\(n-i\)为border当且仅当对于任意\(k\in[0,i)\),模\(i\)余\(k\)的位置没有同时出现0和1. 换句话说,拿出任意一个1的位置\(x\),一个0的位置\(y\),那么对于\(|x-y|\)的所有约数\(i\),\(n-i\)均不合法. 考虑用NTT优化这个过程:记两个多项式\(A(x),B(x)\).若\(s_i=0\)则\([x^i]A(x)=1\):若\(s_i=1\)则\([x^{n-i}]B(x)=1\)…
题意 链接 Sol 生成函数题都好神仙啊qwq 我们考虑枚举一个长度\(len\).有一个结论是如果我们按\(N - len\)的余数分类,若同一组内的全为\(0\)或全为\(1\)(?不算),那么存在一个长度为\(len\)的border. 有了这个结论后我们考虑这样一种做法:把序列看成两个串\(a, b\),若\(a_i = 0, b_j = 1\),那么对于所有的\(k | (|i - j|)\), \(N-k\)都不会成为答案. 考虑怎么快速算不合法的\((i, j)\).对于多项式乘法…
题目链接 比如说上面\(|S|\)为12的字符串,我们欲求出\(f(9)\)的值,那么上面相同颜色的字符必须两两能够匹配.也就是说,同种颜色的字符集里不能同时出现0和1.如果只考虑同种颜色集里相邻的两个字符能否匹配,那么小样例都过不了.. 我们仔细观察就会发现,每隔\(|S|-len\)的位置就会出现相同的字符.我们可以认为长度为\(len\)的border实质上就是将长度为\(len\)的前缀向后偏移\(|S|-len\),看是否能匹配. 如果有两个字符\(s[i],s[j]\ (i<j)\)…
题解 感觉智商为0啊QAQ 显然对于一个长度为\(len\)的border,每个点同余\(n - len\)的部分必然相等 那么我们求一个\(f[a]\)数组,如果存在\(s[x] = 0\)且\(s[y] = 1\)且\(|x - y| = a\) 这个很好求,只要把0和1分别挑出来,NTT卷一下就好了 一个\(len\)合法,即它的\(n - len\)的倍数\(k\),\(f[k]\)都等于0 代码 #include <bits/stdc++.h> #define fi first #d…
题目分析 通过画图分析,如果存在border长度为len,则原串一定是长度为n-len的循环串. 考虑什么时候无法形成长度为len的循环串. 显然是两个不同的字符的距离为len的整数倍时,不存在这样的循环串. 怎么求出两两不同的字符的距离呢? 翻转一下字符串做卷积即可.…
题面 传送门 题解 一旦字符串踏上了通配符的不归路,它就永远脱离了温暖的字符串大家庭的怀抱 用人话说就是和通配符扯上关系的字符串就不是个正常的字符串了比如说这个 让我们仔细想想,如果一个长度为\(len\)的前缀是border,那么对于\(\forall i\in[1,len]\),都有\(s[i]=s[i+n-len]\),也就是说在模\(n-len\)意义下所有位置上的\(01\)要相等 如果有一个\(0\)位置\(i\),一个\(1\)位置\(j\),记\(x=|i-j|\),那么所有\(…
感觉border的性质还是挺神奇的 一个border的性质是$S$有长度为$len$的border当且仅当对$\forall i\equiv j\left(\bmod(n-len)\right)$有$S_i=S_j$,也就是说它有长度为$len-i$的循环节(末尾多出来的部分需要和开头一样),画个图就知道这个性质是对的 所以我们把整个字符串分成长度为$n-len$的许多组,记$\text{pre}_i=S_{1\cdots i},\text{suf}_i=S_{i\cdots n}$ 一个结论是…
题目:https://loj.ac/problem/6436 看题解才会. 有长为 i 的 border ,就是有长为 n-i 的循环节. 考虑如果 x 位置上是 0 . y 位置上是 1 ,那么长度是 | x-y | 的约数的循环节都不可行,因为在该循环节中, x 和 y 处在 “应该相等” 的地位. 最后一个部分分是暴力枚举 0 和 1 来预处理出一个 h[ i ] 表示长度是 i 的约数的循环节不可行.然后枚举循环节的长度 i ,再枚举 i 的倍数看看有没有 “不可行” 的.这样是 nlo…
PKUWC&SC 2018 刷题记录 minimax 线段树合并的题,似乎并不依赖于二叉树. 之前写的草率的题解在这里:PKUWC2018 minimax Slay the Spire 注意到强化牌的强化倍数都是大于\(1\)的正整数,所以可以发现能强化就尽量强化. 用\(F(x,y)\)表示强化牌抽\(x\)张打出\(y\)张的倍率之和 用\(G(x,y)\)表示攻击牌抽\(x\)张打出\(y\)张的攻击之和 那么我们枚举抽了多少张攻击牌,在利用以上两个函数就可以算出答案了. 至于怎么计算那两…
「PKUWC2018/PKUSC2018」试题选做 最近还没想好报THUSC还是PKUSC,THU发我的三类约(再来一瓶)不知道要不要用,甚至不知道营还办不办,协议还有没有用.所以这些事情就暂时先不管了,PKU的题还是不错的,就刷一刷划水.因为比较简单,所以就不单独写博客了. loj2537 Minimax 数据结构题,两个 \(\log\) 直接启发式合并,一个 \(\log\) 需要转移的时候多维护一些东西. 对于每个节点维护一下选择其子树里每个叶子的权值的概率,线段树合并转移即可. cod…
PKUSC2018题解 真实排名 分别考虑第\(i\)个人翻倍和不翻倍的情况,组合数算一下即可,务必注意实现细节. 代码 最大前缀和 设\(sum_s\)表示集合\(\sum_{i\in s} a_i\),\(f_s\)表示最大前缀和等于\(sum_s\)的方案数,\(g_s\)表示选出集合\(s\)排成的最大前缀和均不大于\(0\)的方案数. 因为最终的答案肯定是最大前缀和所在的位置\(pos\)后面一定不存在有一段前缀和大于\(0\),否则向后更新还可以更优. 令全集为\(U\)那么 \[…
看见这个题依稀想起了$5$月月赛时候的事情,到现在仍然它感觉非常神仙. 游戏$k$次价值的期望答案 $$ans_k = \frac{1}{nm}\sum_{i = 1}^{n}\sum_{j = 1}^{n}(a_i + b_j)^k$$ 二项式定理展开 $$ans_k=\frac{1}{nm}\sum_{i = 1}^{n}\sum_{j = 1}^{m}\sum_{t = 0}^{k}\binom{k}{t}a_i^tb_j^{k - t}$$ $$ = \frac{1}{nm}\sum_{…
去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\) 很好想,先把叶子的权值离散化,然后 \(dp[u][i]\) 表示 \(u\) 的权值是 \(i\) 的概率. 没事干了,上线段树合并.(???) 线段树合并新玩法:对于线段树上的一个叶子,比它编号大的所有点在线段树上被拆成的区间应该是:对于递归到这个叶子路上的每个节点,如果是个左儿子,就算上它…
大米饼正式退役了,OI给我带来很多东西 我会的数学知识基本都在下面了 博客园的评论区问题如果我看到了应该是会尽力回答的... 这也是我作为一个OIer最后一次讲课的讲稿 20190731 多项式乘法 FFT 基本概念 1.多项式的两种表达(拉格朗日插值法) 多项式:\(A(x) = \sum_{i=0}^{n-1}a_ix^i\),最高项次数为\(n-1\),次数界为\(n\) \((a_0,\cdots,a_{n-1})\)为多项式的系数表达, \((x_0,y_0),\cdots,(x_{n…
Day1 T2:最大前缀和 枚举答案集合(不直接枚举答案数,相当于状态的离散化),这个集合成为答案当且仅当存在方案使得答案集合的排列后缀和>=0(如果<0就可以去掉显然更优),答案补集的前缀和<0(不能再延伸).预处理方案数.最后统计的时候注意要枚举答案子集的第一个元素,它不需要满足后缀和>=0.O(2^n*n). #include<bits/stdc++.h> using namespace std; ; typedef long long ll; ; int n,M…
[BZOJ5285][HNOI2018]寻宝游戏(神仙题) 题面 BZOJ 洛谷 题解 既然是二进制按位的运算,显然按位考虑. 发现这样一个关系,如果是\(or\)的话,只要\(or\ 1\),那么无论前面是啥,操作完之后都是\(1\):同理\(and\ 0\)也是一样,无论前面是什么,操作完都是\(0\). 换个角度来看,如果\(or\ 0\),无论前面是什么,操作完之后都不改变,\(and\ 1\)同理. 那么把\(or\)写成\(0\),\(and\)写成\(1\). 那么,如果当前操作数…
  [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰         ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是我一年半前,找工作时候写的,那时是发到学校的BBS上.现在我工作了,想法和以前也有不同,但对游戏引擎编程理念还是基本差不多.在我没遇到U…