#jorchard. 2026暑假CSP-J模拟赛01-T2 程老师的果园灌溉
2026暑假CSP-J模拟赛01-T2 程老师的果园灌溉
时间限制:1000ms 内存限制:512MB
题目描述
程老师承包了一片果园。和常见的果园不同,这片果园是沿着一条笔直的公路展开的,可以看作数轴上的一个区间 :从坐标 开始,一直到坐标 为止,区间包含坐标 ,不包含坐标 。果园里的果树都种在整数坐标上,也就是坐标 这些位置各有一棵果树,一共 棵。果树之间的距离有近有远,有的果树紧挨着公路的起点,有的快到了公路的尽头,有的就夹在中间。
今年入夏以来,当地一直没有下雨。程老师购置了一批喷头,打算给果树浇水。第 个喷头有一个固定的浇灌范围,也是一个半开区间 :它能浇到所有满足 的整数位置 上的果树,也就是说,浇灌范围包含坐标 ,不包含坐标 。喷头一旦安装就固定在那里,一直工作,不能中途搬动;每个喷头要么装、要么不装,不存在装一半的说法。喷头的浇灌范围有大有小,有的只能浇到一小段果树,有的能浇到很长一段。
果园的果树是程老师的心血,容不得半点闪失,所以他给自己定下了一条规矩:浇水必须做到双保险。所谓双保险,是说对于每一棵果树,都必须同时有至少两个不同的喷头能浇到它。这样一来,哪怕其中任意一个喷头临时出了问题、不出水了,剩下的喷头仍然能把这棵果树浇到,不让任何一棵树渴着。不同喷头的浇灌范围彼此重叠是很正常的,重叠得越多,这一片的保险越足。
现在,程老师想知道:最少要安装几个喷头,才能让每一棵果树都被至少两个不同的喷头浇到?如果无论怎样安排,都做不到让所有果树都有双重保险,就请你告诉他无解。
输入格式
从文件 orchard.in 中读入数据。
第一行两个整数 ,分别表示喷头的数量和果园的终点。
接下来 行,每行两个整数 ,表示第 个喷头的浇灌范围 。
输出格式
输出到文件 orchard.out 中。
输出一个整数:最少需要安装的喷头数量。如果无法做到双保险,输出 。
数据范围
| 测试点 | 特殊性质 | |
|---|---|---|
| 1 ~ 3 | 无 | |
| 4 ~ 6 | ||
| 7 ~ 9 | A | |
| 10 ~ 13 | 无 | |
| 14 ~ 20 |
- 特殊性质 A:任意一个浇灌范围都恰好对应两个喷头。
对于所有数据,,,。
样例
样例 1 输入
4 5
1 3
1 5
2 5
3 5
样例 1 输出
3
样例 2 输入
6 6
1 3
1 3
2 5
3 6
5 6
1 2
样例 2 输出
5
样例 3 输入
3 8
1 5
1 3
4 8
样例 3 输出
-1
样例解释
样例 1:装 、、 三个喷头:位置 1、2 被前两个喷头同时浇到,位置 3、4 被后两个喷头同时浇到。只用两个喷头无法让每个位置都有两层覆盖,所以答案是 3。
样例 2:装前两个 喷头,再加上 、、,共 5 个喷头:位置 1、2 被前两个喷头同时浇到,位置 3、4 被 、 同时浇到,位置 5 被 、 同时浇到。
样例 3:位置 3 只可能被 一个喷头浇到,达不到两层,因此无解。
- ID
- 684
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: