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
###

浙公网安备 33010602011771号