Pinely Round 2 (Div. 1 + Div. 2) / Codeforces contest 1863 题解
难度:D << B < C << A
Problem A. Channel
https://codeforces.com/contest/1863/problem/A
流程看起来很复杂,让我们重述一下题意。
两数 \(x\), \(y\)。\(opt1\) ,你可以选 \(x\) 和 \(y\) 当中某个非零的,减少 \(1\) 。\(opt2\),让 \(x\) 增加 \(1\) 。\(Q1 :\) 是否可以让 \(y\) 变成 \(0\) , $Q2 : $ 是否可以使让 \(y\) 不变成 \(0\) 。
\(A1:\) 贪心地,尽可能选 \(y\),模拟。
\(A2:\) 贪心地,尽可能选 \(x\),模拟 。
Problem B. Split Sort
https://codeforces.com/contest/1863/problem/B
让我们从一个连续段的视角看这个问题。
| \(10\) | \(19\) | \(7\) | \(1\) | \(17\) | \(11\) | \(8\) | \(5\) | \(12\) | \(9\) | \(4\) | \(18\) | \(14\) | \(2\) | \(6\) | \(15\) | \(3\) | \(16\) | \(13\) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| \([1,3]\) | * | * | * | ||||||||||||||||
| \(4\) | * | ||||||||||||||||||
| \([5,6]\) | * | * | |||||||||||||||||
| \([7,9]\) | * | * | * | ||||||||||||||||
| \([10,13]\) | * | * | * | * | |||||||||||||||
| \([14,16]\) | * | * | * | ||||||||||||||||
| \([17,18]\) | * | * | |||||||||||||||||
| \(19\) | * |
每次选尽可能长的下标递增的值连续的段。
考虑分成两段,值分别是 \([1,10]\), \([11,19]\)
观察 \([1,10]\)
| \(10\) | \(7\) | \(1\) | \(8\) | \(5\) | \(9\) | \(4\) | \(2\) | \(6\) | \(3\) | |
|---|---|---|---|---|---|---|---|---|---|---|
| \([1,3]\) | * | * | * | |||||||
| \(4\) | * | |||||||||
| \([5,6]\) | * | * | ||||||||
| \([7,9]\) | * | * | * | |||||||
| \(10\) | * |
发现连续段的相对位置是不变的。
那么,像 \([1,10][11,19]\) 这样的划分,会导致连续段个数不变;像 \([1,13][13,19]\) 这样的划分,会导致连续段个数 \(-1\)(因为\([10,13]\)变成了前半部分的末尾,\([14,16]\)变成的后半部分的开头,可以拼起来);
那么答案当然是 连续段个数 \(-1\)
Problem C. MEX Repetition
https://codeforces.com/contest/1863/problem/C
第一轮暴力(可以用std::set维护未出现的数)。发现a的元素的值变成了\([0, n]\)范围内的不同数。
对于之后的 \(t = k - 1\) 轮
让 \(a\) 数组下标在 \([0,n-1]\) 之间。
让 \(a[n]\) 成为 \(a\) 数组在 \([0,n]\) 中未出现的那个数。
对于一轮操作,
\(a[0]\) 变成了未出现的 \(a[n]\);由于 \(i=0\) 时把 \(a[0]\) 删掉了,缺失的数变成了 \(a[0]\),因此 \(a[1]\) 会变成 \(a[0]\)。依次执行下去, 数组变成了
\(a[n]a[0]a[1]a[2],...,a[n - 1]\)
其中 原先的 \(a[n - 1]\) 出现在了第 \(n\) 位,表示没出现的数。
执行 \(t\) 次之后,数组变成
\(a[(-t)\mod(n + 1)]a[(-t + 1) \mod (n + 1)],...,a[(-t + n) \mod (n + 1)]\)
那么答案是数组前 \(n\) 项
Problem D. Two-Colored Dominoes
https://codeforces.com/contest/1863/problem/D
横向的多米诺骨牌是不影响每行的 黑白个数差的,因为黑白各贡献一个。
因此每行的 黑白个数差是由纵向的多米诺骨牌构成的。
考虑跨第一行第二行的纵向多米诺骨牌。
如果有偶数个,那么可以任意分配其中一半,在第一行涂白色;另一半,在第一行涂黑色。奇数个是不行的。
如果涂色成功,那么对第二行是没有影响的。不妨去掉这些骨牌。那么继续在第二行递归地做就可以了。
对每一列的 黑白个数差 同理。
浙公网安备 33010602011771号