I. Counter
操作可以都想成连续的,那么输入 $a,b$,意为在 $a-b$ 处进行了一次归零,之后连着进行了 $b$ 次操作,如果中间有冲突,即为 NO
|
|
C. Primitive Root
通过题上公式可以得到 $g=(kP+1)\oplus(P-1)$
显然 $g$ 的数量就是 $k$ 的个数
异或性质: $a-b\leq a\oplus b\leq a+b$
那么 $0\leq k\leq\left\lfloor\frac mP\right\rfloor-1$ 时,所有的 $k$ 都成立,$k\geq\lceil\frac mP\rceil+1$ 时,所有的 $k$ 都不成立,那么只需要特殊判断两边界之间的值即可
|
|
G - Knapsack
显然,免费获取的机会要用在 $w$ 大的物品上
将所有物品排序,先进行一遍背包,得到对前 $i$ 个物品背包时的最大值
再用这个值加上未选的物品中 $v$ 最大的 $k$ 个物品,最大值即为答案
|
|
F - Equivalent Rewriting
每一位的值实际是由最后一次操作他的操作决定的,$n$ 个操作本身构成了 $1~n$ 的拓扑序
只需检查每一位的所有操作,看是否有相邻的操作处于里面,如果有,那么这个 $i \rightarrow i+1$ 这个序列就是不可被更改的,检查完之后如果有没被标记过的即可交换他们的位置,输出即可
|
|
A - Cool, It’s Yesterday Four Times More
因为 $n*m$ 的数量级很小,可以考虑很暴力的做法
我们可以用一个 $(x,y,i,j)$ 记录位于 $(x,y)$ 的袋鼠能否踢掉位于 $(i,j)$ 的袋鼠,同时易想到位于同一个联通块的袋鼠,能否获胜是一样的
要记录 $(x,y,i,j)$ 不能直接使用 $map$ 来存取,这样会使时间复杂度陡升,要将这 $4$ 个数转换为一个数,从而达到 $O(1)$ 的查询
|
|
L - Elevator
偏思维,货物体积只有 $1$ 和 $2$ 这两种情况,可以将体积为 $2$ 的转化为两个体积为 $1$ 的来进行处理
证明如下
-
如果每一趟都能填满 $k$,那么转化前和转化后的结果相同

-
如果出现了剩下体积为 $1$,但是下一个物品体积为 $2$,我们会跳过当前物品,向下寻找体积为 $1$ 的物品
由图可知,这样的填充并不会对答案造成影响
所以只需将所有的物品按楼层高度降序排,从高到低每次选够 $k$ 个物品,答案每次加当前最高楼层即可
|
|
M - Trapping Rain Water
根据题目给出的公式格式可以得到 $\sum_{i=1}^nf_i+\sum_{i=1}^ng_i-n\times\max a_i-\sum_{i=1}^na_i$
难点在于如何维护 $\sum_{i=1}^nf_i$ 和 $\sum_{i=1}^ng_i$
$f,g$ 都是单调的序列,可以发现,二者都是连续相同的片段,即片段会以当前片段开头为最大值存在
这样,我们维护这些片段就只需要用 $set$ 来操作即可
|
|