闲话 23.3.29

闲话

好 今天题目到现在才改完
T1 是个 dp 不动转贪心题
T2 是提交答案的构造 但可以随机化半小时出解

所以今天真的放了 INTERNET YAMERO
感觉机房的喇叭放出来就很有感觉呢(
确实好听(

所以今天闲话先水一下!

模拟赛:happyguy round

\happyguy/\happyguy/\happyguy/\happyguy/\happyguy/\happyguy/\happyguy/\happyguy/

T3

若一个长度为 n 的合法串中 0 的个数为 a,则我们知道这串对答案的贡献是 ngcd(a,n):若 gcd(a,na)=1,则由于循环位移产生的 n 个新串总是不同的;反之串一定是由 gcd(a,na) 个相同子串拼成的,这可以由归纳法的思想看出。

打表可以发现,若原串中全是 ?,则答案为 ingcd(i,n)。我们希望证明的是,对含有相同个数的 0 的所有串来说,合法串在循环同构意义下是唯一的。

设确定的合法串中 0 的个数为 a1 的个数为 na。我们首先将 n 除以 gcd(n,a),这样我们只讨论一个循环节,并保证 gcd(n,a)=1。对一个串,考虑将 0na 的权值,1a 的权值。设单个子串的权值是其中字符权值之和。对整个串来说,权值是 (na)aa(na)=0,并且对任意长度为 l 的子串,子串权值的和都为 0。然后考虑单个子串的权值。

由于我们只讨论合法串,因此这 n 个长度为 l 的循环子串中 0 的个数差值为 1。设 0 的个数只有 kk+1 两种可能,并设含有 k+10 的子串数是 p

首先考虑 p=0 的情况,我们知道这时权值为 (na)ka(lk)=nkal。这值显然为 0,因为括号里两个都是 0 的总贡献次数。
反之我们知道 0 的贡献次数为 p(k+1)+(np)k=al,也就是 nkal=p。由于 p[1,n),则 nkal(n,1]。这样两种子串的权值要么是 nkal(n,1],要么是 n(k+1)al(0,n1]

因此我们知道,任意合法串的子串的权值 (n,n)

我们设 q(i) 为合法串前 i 个字符的权值之和,则合法串的子串 [l,r] 的权值就是 q(r)q(l1)。因此任意合法串的子串的权值就是 (n,n) 等价于 l,r, q(r)q(l1)<n,即前缀和的极差 <n

我们枚举极差对应的前缀和数组的值域,设是 [x,x+n)。可以知道,这样的范围总能唯一地对应一个前缀和数组,进而根据双射唯一地对应一个串。这也证明了上面的唯一性。数组可以贪心地构造,由于前一位加上 naa 总只有其中一个结果在范围内。因此只需要枚举 x,每次重新得到一个字符串,考虑这个串有多少个循环移位可以和给定的串完全匹配。
这是经典问题,可以用多项式优化到 O(nlogn) 单次,总 O(n2logn)

进一步考虑性质,我们不妨先构造 x=0,随后考虑 xx1 的过程。对每个位置 p 而言,其前缀和在模 n 意义下是 ip。由于 gcd(n,i)=1ip 取遍 [0,n) 的每个值。这样我们在移动时,每次只会有前缀和最大(即为 x+n1)的位置变成前缀和最低(即为 x1)的位置,剩下的前缀和值相对大小不变。投射到差分上,也就是这个位置和下一个位置的 01 性取反。所以我们只需要每次翻转 O(1) 个位置,并维护是否存在匹配。
这自然可以 O(n) 单次,总 O(n2)

posted @   joke3579  阅读(100)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示