挖土机杯 CSP-J 组模拟赛 R2 全盘题解
Hisaishi_Kanade
·
·
个人记录
前言
AK了,但是时间很拉
【A】探索未知
题意:给出一大坨分数让你加减。
根据数学知识,\dfrac a b \pm\dfrac c d=\dfrac {ad \pm bc} {bd}。
设 ad\pm bc=x,bd=y,
由于原题要求约分,所以需要将上下除以他们的公约数 g=\gcd(x,y)。
我封装了一个很傻逼的 frac 类,支持 +=/-= 运算符。初始值是 \dfrac 0 1=0。
但是要求形如 -\dfrac {1145141} {1919810} 的需要输出 -1145141/1919810,也就是负号加在分子上,所以 -= 的时候判一下。
代码
【B】球状精灵的传说
首先 n^2 做法显然。
如何优化呢?我们想到一点,\rho 只和 \min(r_1,r_2,r_3) 有关。如果拥抱以后 \rho 更大了,显然改掉的是 r_1。
由此对于任意一个精灵 \{r_1,r_2,r_3\},排序得到 \{q_1,q_2,q_3\}。
我们只要让他和另外一个精灵 \{p_1,p_2,p_3\}(也有序)拥抱时,使得 p_2=q_2,p_3=q_3,且 q_1 最大。
显然答案更优(因为 \min(r_1,r_2,r_3) 更大了)。
但是怎么找呢?
注意到 r_1,r_2,r_3 很小,可以开 10^3\times 10^3 的桶记录。
[代码](https://www.luogu.com.cn/paste/36gx54rq)
### 【C】星环防御工事
题意清楚,不多赘述。
首先想到,对于第 $i$ 坨小行星,肯定是越早干掉越好。
如果 $d_i$ 那天干不掉他,就 $d_i+1$ 天干。
也许你会问:那如果 $d_i+1$ 天也来了小行星,怎么办?
那就 $d_i+2$ 天干!注意 $d_i+1$ 天如果有余力也是可以解决一部分的。
这个贪心如何证明?你可以这样理解,现在这些小行星不解决掉可惜了,后面的小行星又不会立刻丧失机会,所以不如先解决掉眼前的。
[代码](https://www.luogu.com.cn/paste/bzen72od)
### 【D】新的家乡
大致就是说 $n$ 个数,选出 $res$ 个二元组,二元组的和相同。
求 $\max \{res\}$。
第二问就是说,这 $res$ 个二元组有多少种选法。
注意到 $V\le3\times 10^3$,反倒 $n\le 10^6$。
可以考虑基于值域乱搞。
很容易发现,由于只能是两个矿石,那么柱子的高度不超过 $2\times V=6\times 10^3$。
枚举柱子高度,再求方案数即可。
方案数怎么求?
用桶记录第 $h$ 个矿石有多少个即可。
对于第二问,在跑一遍一模一样的,统计得到的次数即可。
但是似乎不需要啊……新增一个变量 `cnt` 统计最大值出现次数,跑一遍就行了。
[代码](https://www.luogu.com.cn/paste/jy4smq7l)