「题集」Public NOIP Round #2 提高

简单写一写题解,T3 和 T4 还是值得一记的。

恰钱

注意到,\(10^9\) 范围内的好数明显数量不多。我们甚至可以直接算出来:

\[\sum_{k=1}^{14}\binom{30-(k+1)}{k-1} \]

结合这个数量,把所有好数提前搜出来,即可做到 \(O(Q\log^2 r)\) 查询。

排序

考虑 DP。设 \(f_k\) 为序列后缀 \([k,n]\) 中,\(k\) 必选时的最长栈长度。

转移时考虑枚举下一个必选数。设 \(p_k=\min_{k<j,a_k<a_j} j\),则容易发现 \(j\) 可以选中当且仅当 \(p_k\le j<p_{p_k}\)\(a_j>a_k\)。对于值域进行扫描,用线段树维护 \(j\) 的限制即可做到 \(O(n\log n)\) 转移。

图同构

有一点 tricky 的题目。

看到题目,第一反应是这题肯定很阴险,给出来的操作肯定不能直接用别问为什么,问就是 NOIP2021 T3 PTSD。

冷静一下发现确实如此。题目描述似乎在割裂地考虑“颜色”和“点权”,但是如果我们将点权和颜色绑在一起看,则容易发现操作的含义就是将点权、颜色交换,并将两个位置的颜色都取反。所以,我们考虑新的“信息”为 \((a,c)\),即点权和颜色二元组。

那么,如果一个连通块是二分图,则原先 \(u\) 的“信息”走到 \(v\) 时,其结果状态是唯一的。我们可以先去掉二分图的位置影响,得到每个“信息”的真实状态。容易发现,如果 \(A\) 可以变成 \(B\),则 \(A\) 图上和 \(B\) 图上“信息”的真实状态应该可以一一配对。

如果不是二分图,则实际上有用的只有奇环上的那一条非树边,我们叫它为“奇边”。当我们在奇边上进行交换时,两个“信息”的真实状态中的颜色会被翻转。这样一来,\(A\) 图和 \(B\) 图的“信息”的真实状态不需要一一配对,而应当保证“差异的数量为偶数”。这个判断方式比较类似。

顺带一提,这道题读入量超级大,最好写 fread 快读。

找零

首先注意到货币系统的面值是题设的而非输入的,这意味着这里面可能有什么门道。

很快就注意到了,\(1\) 是最小面值,且其它面值的 \(\gcd\)\(5\)。这意味着,如果商店要找零 \(x\) 元,实际上得到的 \(1\) 纸币数量是 \(x\bmod 5\)

接下来是对于可能的操作的简化和贪心剪枝

  1. \(1\) 纸币有没有可能用出去?

    事实上没有可能。要么是整钱不够了,拿 \(1\) 纸币去凑出物品的价格,这样显然是在浪费;要么是,我们原本可以用整钱买下物品,但是要拿出 \(1\) 纸币换回更大面额的钱,这也没有意义。当我们要用到这张“更大面额的钱”的时候,我们要么在原始状态下用整钱买不起,要么压根不用拿 \(1\) 纸币去换它。

  2. 怎么购买物品?

    购买总价值为 \(x\) 的商品带来的 \(1\) 纸币为 \((5-x\bmod 5)\bmod 5\),由于取模的存在,很明显应该一个一个买物品

那么,现在这个问题已经转化为了背包问题,并且是特殊的大容量、小价值的背包。由于价值 \(\le 4n\),所以我们可以设 \(f_{x}\) 表示总价值为 \(x\) 时,需要的最小容量,这是一个 \(O(n^2)\) 的 DP。

仍然注意到价值很小,我们利用一个常见的先贪心再调整的思路:先用类似于部分背包的贪心法,求出距离容量上界比较近的一个位置上的最优值,而后在边界上再用普通的背包暴力地做一下调整即可。

这里有另一个思路:对于价值相同的物品,我们必然选取按照容量升序排序后的一个前缀。当我们整体加入某一价值的物品时,容量关于代价是下凸的,这样就存在决策单调性,可以 \(O(n\log n)\) 地完成一次转移。

posted @ 2022-11-05 16:22  crashed  阅读(67)  评论(0编辑  收藏  举报