CF Round 1091(Div.2) 解题报告
CF Round 1091(Div.2) 解题报告
A
略。
B
参见 D。
C
先对行列单独考虑,能遍历行当且仅当 \(\gcd(n,a)=1\),列类似 \(\gcd(m,b)=1\)。
(为了方便描述,下文涉及模的坐标均认为 \((0,0)\) 是原点)
考虑行列每次加 \((a,b)\),那么能遍历当且仅当 \(\gcd(n,m)= 1\),不然周期较小的遍历完一次了,周期大的还没有遍历完,这样会漏一些点。比较严谨地,就是考虑当前在走第 \(i\) 步(指坐标加 \((a,b)\)),那么此时在行列周期中,下标分别为 \((i \bmod n,i\bmod m)\)。如果再走 \(m\) 步,会到 \((i+am \bmod n,i\bmod m)\),那么 \(i\bmod m\) 只可以和 \(\dfrac{n}{\gcd(n,m)}\) 个点配对,因此访问点较少。
考虑行走方向的影响。记 \(g=\gcd(n,m)\),此时少走了 \(\dfrac{(g-1)nm}{g}\) 个点。当 \(g\) 为奇数时,回到 \((1,1)\) 方向不变,只能多走 \(\dfrac{nm}{g}\) 个点;当 \(g\) 为偶数时,回到 \((1,1)\) 方向翻转,可以多走 \(\dfrac{2mn}{g}\) 个点。
有一个问题,这些点不重吗?考虑不考虑方向变换时,新访问的点形如 \((ka+a \bmod n,kb \bmod m)\),它如果被访问过,那么说明存在 \(k_0,k_1\) 满足 \(k_0+1 \equiv k_1 \pmod n\) 且 \(k_0\equiv k_1 \pmod m\) ,由数论知识(去掉同余后用裴蜀定理)可以得出 \(k_0,k_1\) 存在当且仅当 \(\gcd(n,m)=1\),与假设矛盾。那么考虑方向变换后呢?那么考虑方向变换后的点与不考虑方向时经过的点重合的情况,这与上文类似,不赘述。考虑方向变换前与方向变换后经过的新点是否重合,类似列出式子 \(k_0+1 \equiv k_1 \pmod n\) 且 \(k_0\equiv k_1+1 \pmod m\) ,利用中国剩余定理求出,当且仅当 \(\gcd(n,m)=2\) 时,\(k_0,k_1\) 有解。因此当 \(g=2\) 时,也只可以多走 \(\dfrac{nm}{2}\) 个不同的点。
尝试一些 \(g\) 的取值后,发现当且仅当 \(g=2\) 时存在解。
综上,\((n,m,a,b)\) 合法,当且仅当 \(\gcd(n,a)=1,\gcd(m,b)=1,\gcd(a,b)\le 2\)。
D
不妨认为 \(a_0=a_{n+1}=a_{p_1}\),且 \(0,n+1\) 也是特殊位置。
注意到只有相邻颜色不同的位置是重要的,不妨称为关键点。对于一个特殊位置,它可以通过一次操作消除至多两个关键点,这两个关键点分别在它的左右两侧。为了最小化操作次数,我们希望尽可能多地一次消除两个。
称两个特殊位置之间的区间(不含两端)为一个区域,注意到上述操作的本质是将两个来自不同区域的关键点配对,那么记总和为 \(S\),单个区域内的关键点数量最大值为 \(mx\),由经典结论可以得出答案为 \(\max(\dfrac{S}{2},mx)\)。
E
考虑从后往前构造(因为位置越后受到的限制越少)。一个关键的想法是在构造过程中 \(q_i\) 具体是多少并不在意,只关心已确定的 \(q_i\) 之间的相对大小。
那么记 \(i\) 点后面满足 \(a_i <a_j\) 的下标 \(j\) 个数为 \(c_i\)。如果 \(d_i>c_i\),那么无解。否则,取满足条件的位置中 \(q\) 第 \(c_i-d_i-1\) 小的位置 \(k\),令 \(q_i \leftarrow q_k+1\),然后使 \(i<j,q_i \le q_j\) 的位置 \(j\) 的 \(q\) 加一。正确性显然。
F
注意到这本质是有 \(4\) 堆石子的 Nim 游戏(区间左右侧扩展各是一堆石子), 那么选区间本质就是选一个数 \(x\),满足对方选区间得到的异或和为 \(x\) 的最少,也就是说满足 \(l+r=x_2-1,l\oplus r=x\) 的有序二元组 \((l,r)\) 最少。
那么考虑 dp。记 \(f_{i,j,0/1/2}\) 表示已经考虑了最高 \(i\) 位二进制位,现在的异或和为 \(j\),当前不受总和限制、不受总和限制但进位会受限制、受总和限制。转移对当前二进制位 \(l,r\) 分别填什么进行分讨即可。
G
注意到一个不作为路径端点的点的标记在操作过程中也可能被修改,考虑记 \(a_i\) 为 \(i\) 子树内(含自己)标签为 \(1\) 的点的奇偶性,那么可以发现 \(a\) 和原标记形成双射。那么现在每次操作只会使端点的 \(a_i\) 清零。
对于一个大小为 \(n\) 的子树,只考虑一端为根节点的路径时,无论它的形态,在需要操作 \(k\) 时它都有 \(\binom{n}{k}\) 种标记方案。
那么对于根节点,它可以将左右子树的路径合并,那么记 \(mx\) 为左右子树中操作次数的较大值,那么这棵树的操作次数为 \(mx+(a_1 \oplus (mx\bmod 2))\)。后面那部分是清零根节点的代价。
注意到对于一个确定的 \(mx\),可以通过调整 \(a_1\) 来使 \(mx=k\) 和 \(mx=k-1\) 都可以作为答案。
现在考虑怎么对 \(mx\le k\) 的两颗子树计数,记 \(C_i\) 为第 \(i\) 个卡特兰数,\(F(n,m)=\sum_{i=0}^{\min(n,m)}\binom{n}{i}\),那么枚举左子树大小,两棵树分别选取不超过 \(k\) 个点使其标记为 \(1\),那么方案数为
答案就是 \(mx\le k\) 时的方案数与 \(mx\le k-2\) 时的方案数的差。由组合数推论可以得出 \(F(n,m)=2F(n-1,m)-\binom{n-1}{m}\) 来 \(O(1)\) 递推 \(F\)。
时间复杂度 \(O(n)\)。

浙公网安备 33010602011771号