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<stdio.h>

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;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章