写在前面
由于本人很菜,所以都是 div2。
24/08/21
CF1993A
记一下每种选项的个数再和 \(n\) 取个 \(\min\) 即可。
CF1993B
首先先特判掉全奇全偶的情况。
然后就发现操作只能使偶数变成奇数,且答案只能为 \(k\) 或 \(k+1\),\(k\) 为偶数个数,所以只需要把偶数从小到大的与最大的奇数累加,如果任意时刻奇数都大于偶数就是 \(k\),反之为 \(k+1\)。
CF1993C
感觉我的做法比较厉害。
容易发现对于第 \(i\) 盏灯来说只有在 \([a_i+2bk,a_i+(2b+1)\times k)\) 间才会亮。
所以我们就考虑把每个 \(a_i\) 尽可能地挪到与最大的 \(a_i\) 相近的地方,这部分二分一下就行。
那么这时假如有 \(a_i-a_j\ge k\) 就是不合法的。
假如合法那我们就取最大值作为答案。
CF1993D
首先有一个显然的二分+DP。
我们二分中位数 \(mid\),将大于等于中位数的数赋成 \(1\),小于的数赋成 \(-1\)。
然后我们再设 \(dp_{i,j}\) 表示把 \(i\) 作为删完序列中的第 \(j\) 个数的删完序列最大值。
那么如果最后最大值大于 \(0\),就是合法的。
发现状态转移是 \(O(nk)\) 的,过不了。
然后我们就发现其实上述做法十分 shaber,因为 \(i\) 被保留下来了,所以并没有跨过 \(i\) 的连续段被删除,换言之 \(i\) 只能是删完序列中第 \(i\bmod k\) 个数。
这样就转移变成 \(O(n)\) 的了。
CF1993E
很厉害啊,赛时没想出来。
首先直接做相当的不可做,考虑转化一下。
我们令 \(a_{i,m+1}=\bigoplus\limits_{j=1}^ma_{i,j}\),\(a_{n+1,j}\) 同理。
那我们就发现其实操作一其实就是交换行 \(i\) 和行 \(n+1\),操作二就是交换列,那么通过这些操作我们就能使任意行列交换。
对应的,原问题也就变成了给你 \((n+1)\times (m+1)\) 的矩阵,删掉其中的一行一列,使最后权值最小。
容易发现答案的形式可以把行列拆开,那我们就可以枚举不选哪一行或列,设 \(f_{S,i}\) 表示目前选了的行或列的集合为 \(S\),选的最后一行或列为 \(i\) 的最小权值,直接转移即可。
时间复杂度 \(O(2^nn^2m+2^mnm^2)\)。
CF1993F1
比 E 简单多了。
其实那个反转操作没有用,因为你连带着两个操作一块反转就相当于搞了个镜像,所以你最后只要走到 \((2nw,2mh)\) 的位置就是走回了原点。
我们考虑记录每个操作后的位置再从 \(0\) 到 \(k-1\) 枚举走了多少完整的轮 \(j\),那么有:
\[\begin{cases} x_i+jx_0=0\pmod {2w}\\ y_i+jy_0=0\pmod {2h} \end{cases} \]然后我们把每次操作的坐标模 \(2w\) 和 \(2h\) 存 map 里,然后计算答案就行。
CF1993F2
就是 \(k\) 大了点,所以不能枚举了。
我们把上面的式子化一下,有:
\[\begin{cases} jx_0=-x_i\pmod {2w}\\ jy_0=-y_i\pmod {2h} \end{cases} \]然后使用 excrt 合并一下方程组求解范围内解的个数即可。
标签:偶数,pmod,不定期,个数,VP,操作,cases,退役,我们 From: https://www.cnblogs.com/NtYester/p/18376007