題目描述
有一個長度爲整數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;
}