不定期一VP退役远离我

写在前面

由于本人很菜,所以都是 div2。

24/08/21

link

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 合并一下方程组求解范围内解的个数即可。

posted @ 2024-08-23 14:58  Nt_Yester  阅读(23)  评论(0编辑  收藏  举报