Loading

NOIP2024 模拟赛19

A

拆位算贡献,枚举每一个位置,与操作两者都是 \(1\),异或操作相反,或操作有一个是 \(1\) 即可。

B

观察到条件 \(a_1\le k\) 证明是必然有答案的,答案这样构成:从 \(1\) 走到任意点 \(j\),然后 \(j\) 挖空,然后推到 \(i\),记 \(f_i\) 为从 \(1\) 走到 \(i\) 的最小花费,答案 \(i\) 即为 \(f_j+h_j+2\times |i-j|\),问题变成求 \(f_i\),先把 \(h_{i-1}-h_i\) 塞进线段树里,然后转化成一堆数,每次可以将一些数减去 \(1\),使得它们的平方和小于等于某个数,一个比较基础的贪心策略就是每次选最大的然后减去 \(1\),这个显然会超时,不妨考虑这样最后造成的结果,就是一堆数都是最大值 \(x\),然后又有一些是 \(x-1\) 这种,所以可以直接二分这个最大值 \(x\),然后 check 一下是否是在一个界限范围之内的,当然找到这个 \(x\) 后,有些 \(x\) 是可能变成 \(x+1\) 的,二分一下即可,复杂度为 \(\mathcal{O}(n\log n)\),但是常数很大。

C

大样例太水了导致挂分的,愣是 7 个大样例都没查出来问题,具体做法是城市建设那道题类似的,与 \(q\) 相关的边很少,将与 \(q\) 相关的边先设为 \(\text{inf}\),然后跑一遍最小生成树,此时没有被选择的边且与 \(q\) 不想关的边在后续决策中也一定不会出现。然后将于 \(q\) 相关的边设为 \(-\text{inf}\),然后跑一遍最小生成树,此时被选择的边且与 \(q\) 不想关的边在后续决策中一定出现,将它们记录下来。将上面两种边排除发现边就已经很少了,然后 \(2^q\) 枚举一下限制选哪边,注意与 \(q\) 相关的边也应该加入计算。

D

不会捏。

posted @ 2024-10-30 19:04  AresF  阅读(31)  评论(0)    收藏  举报