Codeforces Round 1045 (Div. 2)

A

容易发现 \(n,\max(a,b),b\) 奇偶性相同时可行,否则不可行。

B

考虑模 \(k+1\) 意义,相当于每次可以减一或者不变。

可以将所有数调整为 \(k+1\) 的倍数,这是合法的。

C

只需每个偶数位不小于旁边两个奇数位之和。

从前往后扫,不合法时优先改后一个位置即可。

D

手玩一些数据感受一下,操作类似于缩叶子。

于是最小次数为 \(n-1-l\),其中 \(l\) 是直径长度。

那么只需让直径加 1,找直径旁边的任意一个点滑过去即可。

E

考虑倒着做,每次用 3 次交互求出两个位置。

注意到相邻位置跳跃次数最多相差 1,易证。

假设现在要求 \(x,x+1\),设 \(x+2,x+3\) 开始跳跃次数分别为 \(p,q\)

  • \(p=q\)

询问 \(x+1\),交换 \(x\),询问 \(x+1\) 可区分所有情况。

  • \(p=q+1\)

询问 \(x\),交换 \(x\),询问 \(x\) 可区分所有情况。

对于 \(2\nmid n\) 还会差一个位置,要用两次交互解决。

  • \(a_2=1\)

询问 \(1\) 可区分所有情况。

  • \(a_2=2\)

套用上面的做法,因为是 2 所以无需再次询问跳跃次数。

F(补)

不会,还是太菜啦。

注意到关键性质:0,1 0,3 2,1 2,3 的结果都是 1。

那么设 \(a_{i,j}\) 为 0,2 分成 \(i\) 个连续段内部得数为 \(j\) 的方案数,\(b_{i,j}\) 为 1,3 分成 \(i\) 个连续段内部得数为 \(j\) 的方案数,而这两个段数至多相差 \(1\),则将 \((a_i,b_i),(a_i,b_{i+1}),(a_i,b_{i-1})\) 分别卷积即可得出答案。

那么只需计算 \(a\)\(b\) 同理),设所有 0,2 依次排列后分别有 \(p,q\) 个连续段(\((p,q)\) 共有 \(O(n)\) 种),则排列方案数为 \(\binom{c_0-1}{p-1}\binom{c_2-1}{q-1}\)

然后需要将其分段,设相同数和不同数之间的分断个数为 \(x,y\),则方案数为 \(\binom{c_0+c_2-p-q}{x}\binom{p+q-1}{y}\),因此总方案数为 \(\binom{c_0-1}{p-1}\binom{c_2-1}{q-1}\binom{c_0+c_2-p-q}{x}\binom{p+q-1}{y}\),此时段数为 \(x+y+1\),得数为 \(p+q-1-y\)

总时间复杂度 \(O(n^3)\)

posted @ 2025-08-27 08:08  ax_by_c  阅读(27)  评论(0)    收藏  举报