乱切的题(2023寒假)
\(2023.1.20\)
CF559C Gerald and Giant Chess
这道题竟然有2200
看到 \(n\) 只有 \(2000\) 的大小, 所以应从小黑子入手. 显然, 如果只有小白子, 我们可以用组合数快速求出走法总数. 那么, 我们就可以求出任意中间无小黑子的两个小黑子之间的方案数. 至此, 为求出答案, 我们只需要在终点安插一个小黑子即可.
递推时, 我们可以枚举当前小黑子左上方的最近(即两者形成的矩阵之间不含其他小黑子)的小黑子来更新当前位置. 我们记录从起点不经过其他小黑子到当前小黑子的的方案数, 等于从起点到当前小黑子的所有方案数减去从起点到该点左上角所有小黑子的方案数与各自 转移方案数 (从一个小黑子到另一个小黑子的方案数)的乘积.
\(2023.1.24\)
CF577B Modulo Sum
难度:1900
它只让我们输出 YES 或 NO, 而非方案数, 是在暗示我们什么呢~ /滑稽
首先看到这种问题, 自然而然地想到了背包. 但是观察到 \(n\) 的范围很大, 甚感无从下手. 但是, 我们仔细推敲一下, 发现当 \(n > m\) 时, 必定有一个数 \(Mod\) \(m\) 后等于 \(0\), 故我们只需考虑 \(n \le m\) 的情况即可, 此时 \(n\) 的范围是 \(2000\), 可以直接用01背包切了它!
\(2023.1.25\)
CF767D Cartons of milk
难度:2100, 典型的贪心水题.
原本以为只要将所有保质期排个序去判断就好了, 但是发现这样家里的不一定都喝掉了, 所以摒弃这个想法.
那么, 我们可以将天数从后往前遍历, 如果当天必须要喝掉的牛奶数量(即保质期到了的牛奶数量)大于 \(k\), 那么我们就将多的牛奶向前推, 提前喝掉; 否则,我们就可以多处理 \(k-该数量\) 瓶牛奶. 此时如果没有前者推下来的牛奶, 则可以在商店购买, 以求结果最大化.
\(2023.1.26\)
CF785E Anton and Permutation
难度:2200
首先对于这种题目我们可以先寻找性质. 这道题中, 显然对于任意一次操作, 逆序对数少了 \([l+1,r-1]\) 中比 \(a[l]\) 小的数和比 \(a[r]\) 大的数, 多了比 \(a[r]\) 小的数和比 \(a[l]\) 大的数. 由于 { 比 \(a[l]\) 大的数 \(+\) 比a[l]小的数 \(=\) 比 \(a[r]\) 大的数 \(+\) 比a[r]小的数 }, 所以可以化简, 我们发现其增量其实是 \(2\) \(\times\) \((比a[r]小的数\) \(-\) \(比a[l]小的数)\). 那么我们只需要用一种数据结构维护某区间小于某数的数量即可. 此处我选择了分块. 之前在衢州集训时遇到一个类似的情况, 这里考虑将其值域分块然后块内排序, 查找答案时二分.

浙公网安备 33010602011771号