挖土机杯 CSP-J 组模拟赛 R2 全盘题解

· · 个人记录

前言

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)