3.14 CF VP 赛后题解
A.OutOfMemoryError
糖糖题。
用时 11min。
Description
给定长为 \(n\) 的序列 \(a\),对其进行 \(m\) 次操作,给定 \(x\)、\(v\),形如 \(a_{x}\gets a_{x}+v\)。
在任意操作结束后,若存在一个元素 \(\gt h\),则序列回滚到初始状态,即立刻消去包括此次在内的所有操作对数组的影响。
求操作结束后的序列 \(a\)。
Solution if 你没有脑子
哇!单点修改!全局推平!
好的线段树启动!
时间复杂度 \(O(n\log n)\)。
提交记录。
Solution if 你有脑子
记录上一次有用的操作的位置。
一次操作结束后判定这个数有没有超过 \(h\)。
如果有,则依次回滚上一次操作到现在的所有操作,随后把上一次有用的操作位置更新。
每个操作至多进行两次,时间复杂度 \(O(n)\)。
B.The Robotic Rush
糖糖题。
用时 21min。
Description
有 \(n\) 个机器人,坐标为 \(a_1,a_2,\ldots,a_n\)。有 \(m\) 个尖刺,坐标为 \(b_1,b_2,\ldots,b_m\)。机器人碰到尖刺后会死亡。
进行 \(k\) 次操作,每次操作给定 \(\{-1,1\}\) 中的一个数,使当前所有存活的机器人全部向左或向右移动一个单位距离。
每次操作后,输出当前存活的机器人数量。
Solution
题解。
对每个机器人处理出来向左向右走多少距离会碰到尖刺。
发现对于一个机器人一定是一个时刻之前存活,一个时刻后死亡。
因此可以对于每个 \(1\le i\le k\) 都记录 \([1,i]\) 的操作中,向左走的最长距离,向右走的最长距离。
如果走的最远距离对于这个机器人碰到了尖刺,那这个机器人在这个时刻就是死亡的。
所以可以二分。
时间复杂度 \(O(n\log n+n\log k)\)。
提交记录。
C.Count GCD
糖糖题。
用时 30min。
Description
给定长为 \(n\)、值域 \([1,m]\) 的序列 \(a\)。
计算有多少个本质不同的长为 \(n\)、值域 \([1,m]\) 的序列 \(b\) 满足:
- \(\forall i \in [1,n], \gcd(\{b_1,b_2,\ldots,b_i\})=a_i\)。
对 \(998244353\) 取模。
Solution
显然,无解条件为 \(\exists i\in [1,n), a_{i+1}\nmid a_i\)。
首先注意到 \(b_i\) 能放的数只有 \(a_i\) 的倍数,这个倍数的另一个因子在 \([1,\lfloor \frac{m}{a_i} \rfloor]\) 范围里。
其次既然我们要控制 \(\gcd(a_{i-1},b_i)=a_i\),那么 \(b_i\) 就不能包含 \(\frac{a_{i-1}}{a_i}\) 中的任意一个质因子。
问题转化成了计算 \([1,s]\) 中不包含质数集合 \(P\) 中的任意一个数作为因子的数的数量。
这是个简单容斥,显然可以做到 \(O(2^{|P|})\)。
对 \([2,n]\) 中的每个数都这样计算一遍,乘起来就是答案。
复杂度太难分析了我不会,可以看这个题解。我赛时感性理解了一下感觉是对的就写了,然后过了。
提交记录。
D.Mixing MEXes
糖糖题。
但是糖糖的是我。数组开小虚空调了两个小时。
用时 2h8min 没调出来。赛后喂给 AI 才看出来。
Description
给定 \(n\) 个序列 \(a_1,a_2,\ldots,a_n\)。
记 \(n\) 个序列的价值为 \(\sum_{i=1}^{n} \operatorname{MEX}({a_i})\)。
对这些序列恰好进行一次以下操作:
- 选择三个数 \((i,j,k)\),\(1\in [1,n],j\in [1,|a_i|],k\in [1,n],k\ne i\)。
- 将 \(a_{i,j}\) 从 \(a_i\) 中删去,在 \(a_{k}\) 中加入 \(a_{i,j}\)。
对于所有的合法三元组 \((i,j,k)\),计算进行对应操作后的 \(n\) 个序列的价值之和。所有操作之间互相独立。
Solution
题解。
处理出来每个序列的 \(\operatorname{MEX}\)。
发现只进行一次操作这个限制非常厉害。
因为数的总数很少,所以我们可以依次枚举每个数,计算挪走这个数对答案的贡献。
考虑把一个数 \(x\) 挪到另一个 \(\operatorname{MEX}\ne x\) 的序列中,则这次操作不会改变这个序列的 \(\operatorname{MEX}\)。
如果把 \(x\) 挪到一个 \(\operatorname{MEX}=x\) 的序列中,则这个序列的 \(\operatorname{MEX}\) 会变化。
而不难发现,因为至多加入一个元素,所以每个序列加入其 \(\operatorname{MEX}\) 后的新 \(\operatorname{MEX}\) 也是可以计算的。
我们就对这个东西开个桶记录一下总和就可以了,每个序列的新 \(\operatorname{MEX}\) 挂在原 \(\operatorname{MEX}\) 的位置上,额外记一个计数器表示 \(\operatorname{MEX}=x\) 的序列的数量。
提交记录。
E.Space Isaac
史。
Description
给定 \(m\),定义全集 \(U=\{0,1,2,\ldots,m-1\}\)。
给定大小为 \(n\) 的集合 \(A\),定义其关于 \(U\) 的补集为 \(B\)。
对于集合 \(\{(x+y)\bmod m\mid x\in A,y\in B\}\),求其关于 \(U\) 的补集。
Solution
题解。
以下所有运算及说明均在模 \(m\) 意义下进行。
考虑一个数 \(x\) 什么时候会成为答案,当且仅当存在 \(p+q=x\) 且 \(p\in A,q\in B\)。
也就是对于 \(x\) 的所有分解方案 \(x=p+q\),要么 \(p\) 和 \(q\) 都在 \(A\) 中,要么都不在。
现在考虑一个平凡的 \(i\)。
若我们取 \(x=a_1+a_i\),固定了这个 \(x\),那么又因为 \(a_2\) 在 \(A\) 中,所以 \(x-a_2\) 也应当在 \(A\) 中。
而这个 \(x-a_2\) 能对应哪个数?显然是 \(a_{i-1}\)。
这样一直匹配下去,如果每个数都能匹配上,则这个 \(x\) 在前 \(i\) 个数的范围内合法。
而 \(i\) 后面也有数,此时 \(a_{i+1}\) 显然应该匹配 \(a_n\),因为和为 \(x\) 只有两种情况:\(x\) 和 \(x+m\)。
前 \(i\) 个数两两匹配,和显然不可能为 \(x+m\);自然后 \(n-i\) 个数两两匹配的和就为 \(x+m\) 了。
如何刻画这个条件?
我们做一个差分,发现两端匹配和相等等价于差分数组上是回文的。
所以枚举断点,使用哈希或 manacher 判断当前的 \(i\) 是否合法即可。
提交记录。

浙公网安备 33010602011771号