NOIP 模拟赛
Author:HJWJBSR&duyege
Blue
Blue 是个动物学家,不仅喜欢研究猫和老鼠,还喜欢研究青蛙。
他最近开始研究青蛙过河的问题,可以简化成:数轴上$ 0 $为岸边,$L $为河对岸。$(0,L)$中间存在 n 个石子。已知青蛙一跳可以跳距离$ D$,而且不能沾水。求问能不能跳到河对岸。当然他觉得这个问题非常 naïve,于是在思考如果青蛙有 $m$ 个,且石头被踩过之后就会沉下去,$m $个青蛙还能不能依次安全过河。如果不能则问最多能有多少个过河。
输入
第一行为一个正整数$ T $代表数据组数。每组数据第一行四个正整数:$n、m、D、L$。第二行 n 个升序正整数 $ai $代表第 $i $个石子坐标为 $ai$。保证没有重复且都小于$ L$。
输出
$T$行”Excited”代表全部能过河或者一个整数代表有多少个能过河的。
对于 10%的数据保证 m=1.
对于另外 10%的数据保证 D=L.
对于另外 10%的数据保证 n=L-1.
对于另外 30%的数据保证 n<=100, L<=10^5.
对于 100%的数据保证 m<=n<=10^6,D<=L<=10^9.
数据范围中的 n、m 皆代表题目描述中 n、m 的总和。
SAMPLE
INPUT
5
10 9 16 30
2 4 6 9 11 15 18 19 25 27
10 1 23 30
10 11 13 14 15 16 18 26 27 29
10 7 28 30
2 3 7 9 12 15 20 24 27 28
10 3 18 30
1 6 9 14 18 19 22 27 28 29
10 7 10 30
1 2 4 6 18 19 20 22 23 26
OUTPUT
5
Excited
Excited
Excited
0
既然作为第一题,绝对不会是DP,通常就是简单的贪心了。
考试时想的比较多,由于需要求出人数,考虑到转化为二分判断可行性。判断还是用贪心,依次往后跳,记录下来最后看看有没有超过$D$的,复杂度$O(nlogn)$。
然而正解是$O(n)$的直接贪心,对于每次跳,在每次跳的过程中,能跳过去最少的一次人数就是能跳过去的人数。
题解的代码变量名十分惊奇,我就发一下自己的代码好了。