练习题 | 校门外的树

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题 | 校门外的树相关的知识,希望对你有一定的参考价值。

题名  校门外的树

问题描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止

输入数据

输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出要求

输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

输入样例

500 3

150 300

100 200

470 471

输出样例

298

思考 

可先将马路上所有种了树的点全都标识为0,再把各区域中的点覆盖标识为1,最后计数0的个数,即为马路上剩余树的数目。

代码如下 

 1 import java.util.Scanner;
 2 
 3 public class Tree {
 4 
 5     public static void main(String[] args) {
 6         // TODO 自动生成的方法存根
 7         //校门外的树
 8         Scanner scan=new Scanner(System.in);
 9         int L=scan.nextInt();
10         int M=scan.nextInt();
11         
12         int[]startP=new int[M];
13         int[]finishP=new int[M];
14         for(int i=0;i<M;i++){
15                 startP[i]=scan.nextInt();
16                 finishP[i]=scan.nextInt();
17         }
18         scan.close();//按要求输入数据
19         
20         int[]tree=new int[L+1];//一共L+1颗树
21         for(int i=0;i<M;i++){
22             for(int k=startP[i];k<=finishP[i];k++){
23                 tree[k]=1;
24             }
25         }//将要移走的树标识为“1”
26         
27         int counter = L+1;
28         for(int k=0;k<L+1;k++){
29             if(tree[k]==1)counter-=1;
30         }//计数还剩多少棵树
31         System.out.print(counter);  
32     
33     }
34 }

 

 

以上是关于练习题 | 校门外的树的主要内容,如果未能解决你的问题,请参考以下文章

校门外的树

P1047 校门外的树

一本通1537校门外的树

Vijos1448校门外的树 题解

校门外的树

校门外的树