#jorchard. 2026暑假CSP-J模拟赛01-T2 程老师的果园灌溉

2026暑假CSP-J模拟赛01-T2 程老师的果园灌溉

时间限制:1000ms 内存限制:512MB

题目描述

程老师承包了一片果园。和常见的果园不同,这片果园是沿着一条笔直的公路展开的,可以看作数轴上的一个区间 [1,L)[1, L):从坐标 11 开始,一直到坐标 LL 为止,区间包含坐标 11,不包含坐标 LL。果园里的果树都种在整数坐标上,也就是坐标 1,2,3,,L11, 2, 3, \dots, L-1 这些位置各有一棵果树,一共 L1L-1 棵。果树之间的距离有近有远,有的果树紧挨着公路的起点,有的快到了公路的尽头,有的就夹在中间。

今年入夏以来,当地一直没有下雨。程老师购置了一批喷头,打算给果树浇水。第 ii 个喷头有一个固定的浇灌范围,也是一个半开区间 [li,ri)[l_i, r_i):它能浇到所有满足 lix<ril_i \le x < r_i 的整数位置 xx 上的果树,也就是说,浇灌范围包含坐标 lil_i,不包含坐标 rir_i。喷头一旦安装就固定在那里,一直工作,不能中途搬动;每个喷头要么装、要么不装,不存在装一半的说法。喷头的浇灌范围有大有小,有的只能浇到一小段果树,有的能浇到很长一段。

果园的果树是程老师的心血,容不得半点闪失,所以他给自己定下了一条规矩:浇水必须做到双保险。所谓双保险,是说对于每一棵果树,都必须同时有至少两个不同的喷头能浇到它。这样一来,哪怕其中任意一个喷头临时出了问题、不出水了,剩下的喷头仍然能把这棵果树浇到,不让任何一棵树渴着。不同喷头的浇灌范围彼此重叠是很正常的,重叠得越多,这一片的保险越足。

现在,程老师想知道:最少要安装几个喷头,才能让每一棵果树都被至少两个不同的喷头浇到?如果无论怎样安排,都做不到让所有果树都有双重保险,就请你告诉他无解。

输入格式

从文件 orchard.in 中读入数据。

第一行两个整数 n,Ln, L,分别表示喷头的数量和果园的终点。

接下来 nn 行,每行两个整数 li,ril_i, r_i,表示第 ii 个喷头的浇灌范围 [li,ri)[l_i, r_i)

输出格式

输出到文件 orchard.out 中。

输出一个整数:最少需要安装的喷头数量。如果无法做到双保险,输出 1-1

数据范围

测试点 nn 特殊性质
1 ~ 3 20\le 20
4 ~ 6
7 ~ 9 105\le 10^5 A
10 ~ 13 2000\le 2000
14 ~ 20 105\le 10^5
  • 特殊性质 A:任意一个浇灌范围都恰好对应两个喷头。

对于所有数据,1n1051 \le n \le 10^52L1092 \le L \le 10^91li<riL1 \le l_i < r_i \le L

样例

样例 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,3)[1,3)[1,5)[1,5)[2,5)[2,5) 三个喷头:位置 1、2 被前两个喷头同时浇到,位置 3、4 被后两个喷头同时浇到。只用两个喷头无法让每个位置都有两层覆盖,所以答案是 3。

样例 2:装前两个 [1,3)[1,3) 喷头,再加上 [2,5)[2,5)[3,6)[3,6)[5,6)[5,6),共 5 个喷头:位置 1、2 被前两个喷头同时浇到,位置 3、4 被 [2,5)[2,5)[3,6)[3,6) 同时浇到,位置 5 被 [3,6)[3,6)[5,6)[5,6) 同时浇到。

样例 3:位置 3 只可能被 [1,5)[1,5) 一个喷头浇到,达不到两层,因此无解。

难度 普及
通过率 75%
尝试 4
已通过 3
ID
684
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者

相关

在下列比赛中:

暑假CSP-J模拟赛 第1场