Codeup 问题 A: 剩下的树

题目描述

有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。
    现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。
    可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入

两个整数L(1<=L<=10000)和M(1<=M<=100)。
    接下来有M组整数,每组有一对数字。

输出

 可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

样例输入

4 2
1 2
0 2
11 2
1 5
4 7
0 0

样例输出

2
5

思路:

拿样例输入举例,其实就是先接受到4 2 数据,在 0~4 区间,然后再接受两组数据为(1 2,0 2),这两组数据就是要移除的树,一共是(0,1,2),这样剩下的树就有(3,4)两颗树,以此类推。用数组来处理这个问题,先把 长度为 l 的数组进行赋值为1 ,代表树,置为0 则代表移走了树,然后统计数组中的 1 即可。

代码: 

#include

int main(void){
	int l,m;
	int sum = 0;
	while(scanf("%d %d",&l,&m) != EOF){
		if(l == 0 && m == 0){
			break;
		}
		int a[l+1];
		for(int i = 0;i < l+1;i++){
			a[i] = 1;
		}
		
		while(m--){
			int l,r;
			scanf("%d %d",&l,&r);
			for(int j = l;j <= r;j++){
				a[j] = 0;
			}
		}
		for(int k = 0;k < l+1;k++){
			if(a[k] == 1) sum++;
		}
		printf("%d\n",sum);
		sum = 0;
	}
	return 0;
} 

 

你可能感兴趣的:(Codeup)