题名 校门外的树
问题描述
某校大门外长度为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 }