NOIP2024 Day -10 训练

--- title: NOIP 2024 Day-10 训练 date: 2024-11-20 16:30:52 tags: --- ## Day -10 2024.11.20 ### 模拟赛 #### T1 怎么挂了?怎么挂了?怎么挂了?怎么挂了?怎么挂了?怎么挂了?怎么挂了?怎么挂了? 急了。 注意到,字典序具有传递性,于是把大于前缀转化为仅需大于上一个。 一个符合人类朴素价值观的贪心就是,钦定 ### ### 讲课 #### CF1251D Salary Changing [Link](https://www.luogu.com.cn/problem/CF1251D) 考虑二分答案。 中位数大于等于 $k$ 等价于有至少一半的数大于 $k$ 考虑先让所有数取下界,按达到 $k$ 的代价从小到大贪心分配即可。 #### P4823 \[TJOI2013\] 拯救小矮人 [Link](https://www.luogu.com.cn/problem/P4823) 考虑两个人的情况,显然 $a_i + b_i$ 较大的要放在后面逃走,因为相比另一人,他自己更容易逃走。 推广到有一车人也是对的。 但是要决策一下是否逃走,排序之后背包一下就行了。 跟 [AT_dp_x Tower](https://www.luogu.com.cn/problem/AT_dp_x) 好像 /se #### P4698 [CEOI2011] Hotel [Link](https://www.luogu.com.cn/problem/P4698) 好像[买东西题](https://www.luogu.com.cn/problem/P11268)。 发现 $p_i < p_j$ 则有 $c_i \leq c_j$ 然后贪心就行了 ## Day -9 ### 模拟赛 #### T1 背包。 神秘结论。 #### T2 背包。 考虑平均数为 $x$,那么把所有数都减去 $x$ 之后,平均数为 $0$ 那么 $0$ 可以随便选,有 $k + 1$ 种情况。 然后仅需要保证正数负数之和为 $0$ 即可。 发现正数范围为 $[1, n - x]$,负数范围为 $[-x + 1, -1]$。 于是问题转化为从 $[1, n - x]$ 和 $[1, x - 1]$ 中选择一些和相等的数,并且每个集合中每种数不得多于 $k$ 个。 多重背包预处理一下,然后枚举这个相等的和即可。 > 计数多重背包的前缀和优化 > > 直接当作完全背包做,减去不合法的部分即可。 ### 讲课 #### P2605 \[ZJOI2010\] 基站选址 考虑一个 $f_{i, j}$ 表示考虑前 $i$ 个,已经选择了 $j$ 个,并且钦定选择第 $i$ 个的最小代价。 转移是不困难的 $f_{i, j} \leftarrow f_{k, j - 1} + c_i$ #### [AGC018C] Coins [Link](https://www.luogu.com.cn/problem/AT_agc018_c) 感觉很早之前就看过这个题了(?) 考虑钦定初始所有都是金币,然后把三元组 $(a, b, c)$ 换成二元组 $(b - a, c - b)$, 先 Exchange Argument 决定一下顺序,然后问题就变成,选择 $y + z$ 个,前 $y$ 个是 ## Day -8 ### 模拟赛 暴力 92,kd-tree 40 /cy/cy/cy 这下 rp -= inf 了 ### 讲题 #### NN Country [Link](https://www.luogu.com.cn/problem/CF983E) 考虑倍增先跳到 lca 之前。 然后就是要寻找一条穿过 lca 的路线。 容易发现这个的限制是路线的两个端点在两个起点所在的子树中,容易用 $dfn$ 序转为二维数点。 ## Day -7 ### 模拟赛 鉴定为省选模拟赛。 最高分 130。 ### 讲课 #### P10430 [JOISC 2024 Day1] 鱼 3 [Link](https://www.luogu.com.cn/problem/solution/P10430) 观察到操作有交换律,因此考虑先把所有 A 操作完成了,再去做 B。 因为 B 操作只能凑出单调不降的序列,因此我们的目标实际上是通过尽可能少的 A 操作把序列变成单调不降的。 而这个单调不降的序列的形态其实是不重要的,因为我们仅需要最小化 A 的操作次数。 然后在 $i$ 上进行 A 操作相当于把 $c_i$ 减去 $D$。 然后就考虑离线。 把询问的 $r$ 从小到大扫,首先考虑从当前的 $r$ 暴力往前修改,因为只能单点减,所以最后把每个数贪心的修改成刚好小于下一个的是正确的。 我们发现,对于 $c_{i + 1} - c_i < D$ 的两个数,我们永远只会把她们两个一起减。 于是我们把这个看作连续段,考虑颜色段均摊,用一个栈维护连续段,每次可能会把栈顶合并掉。 此外,还需要一个线段树,维护区间减法,以处理连续段一起减的操作和单点查询。 #### P3769 \[CH弱省胡策R2\] TATT 题解 [Link](https://www.luogu.com.cn/problem/solution/P3769) 树状数组套 kd-tree 恐怖 /jk 先按照 $a$ 排序,然后转化为,用树状数组来维护 $b$ 这一维。 然后对于每一个 $b$,使用二维 kd-tree 维护。 一个小 trick 是先把每个点的 $b$ 的排名预处理出来,插入空节点。 然后进行一个数据结构优化 dp 即可。 #### P6189 \[NOI Online #1 入门组\] 跑步 [Link](https://www.luogu.com.cn/problem/P6189) $O(n \sqrt n)$ 求拆分数 /jk/jk 好像还挺典的。 考虑朴素的暴力 dp ,发现就是做一个完全背包。 记 $f_{i, j}$ 为仅使用 $1$ 到 $i$ 的数,和为 $j$ 的方案数。 容易写出转移 $f_{i, j} \leftarrow f_{i - 1, j} + f{i, j - i}$,且初始有 $f_{0, 0} = 1$。 但是这个是 $O(n ^ 2)$ 的。 大哭。 考虑根号分治,对于所有小于 $B$ 的数做刚才这个dp,复杂度 $O(nB)$。 对于较大的数,我们采取另一种 $dp$。 一个观察是,所有拆分数都可以由一下两种操作得来: - 向可重集中加入一个 $x$ - 把当前可重集中的所有数都增加 $1$ 于是可以记 $g_{i, j}$ 表示当前可重集大小为 $i$,和为 $j$ 时的方案数。 有转移 $g_{i, j} \leftarrow g_{i - 1, j - m} + g_{i, j - i}$ 注意到可重集的大小为 $O(\frac{n}{B} n)$ 不妨取 $B = \sqrt{n}$X 然后把两部分卷一下就对完了。 ## Day -6 xtq xtq xtq ## Day -5 zyz zyz zyz ### 讲课 #### Make Q 考虑枚举环上向外连的那个点和那条边。 然后注意到这条边一定是那个点前三小的出边。 然后就枚举这个,删去,然后再求最小环就行了。 最小环仅需要构造一个最短路树,选取子树不同的两个点,钦定在环上即可。 ## Day -4 ## Day -3 ###
posted @ 2025-04-30 19:09  Rainbow_Automaton  阅读(5)  评论(0)    收藏  举报