某校大门外长度为L 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们可以把马路看成一个数轴,马路的一端在数轴0 的位置,另一端在L 的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。 输入 输入第一行是一个整数N,表示有N组测试数据。 每组测试数据的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L 代表马路的长度,M 代表区域的数目,L 和M 之间用一个空格隔开。 接下来的M 行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 输出 输出包括N行,每行只包含一个整数,表示马路上剩余的树的数目。
时间: 2024-03-31 10:37:44 浏览: 373
【java】校门外的树
好的,这道题目是一个经典的区间覆盖问题,可以采用贪心算法解决。
对于每个测试数据,我们可以先将每个区域按照起始点从小到大排序,然后从左到右遍历每个区域,记录当前已经移走的树的数量,直到遇到一个区域的起始点大于当前已经移走的树的数量,则这个区域之后的所有树都不会被移走,直接统计剩余的树的数量即可。
具体实现可以按照以下步骤进行:
1. 读入测试数据的个数N,循环读入每个测试数据。
2. 读入马路长度L和区域数目M。
3. 循环读入每个区域的起始点和终止点,并将它们按照起始点从小到大排序。
4. 初始化已经移走的树的数量为0,循环遍历每个区域:
1. 如果当前区域的起始点大于等于已经移走的树的数量,则这个区域之后的所有树都不会被移走,直接统计剩余的树的数量并输出,退出循环。
2. 否则,将当前区域的树的数量加入已经移走的树的数量中。
5. 如果所有区域都被遍历完了,说明所有树都被移走了,输出0。
下面是参考代码:
阅读全文