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)\)。

浙公网安备 33010602011771号