###[1099:校门外的树](https://www.dotcpp.com/oj/problem1099.html "1099:校门外的树")
####题目描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
#### 输入
输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
#### 输出
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
####解题思路
##### 思路:
声名一个数组标记建地铁的区域,
当a[i]==1时 该坐标为建地铁的区域;
当a[i]==0时 该坐标为的树区域;
###### `int a[10002]={}`用于标记建地铁的区域
```
int a[10002]={},x = 0,y = 0;
for(int i = 1;i <= m;i++){
cin >> x >> y; //分别表示一个地铁区域的起始点和终止点的坐标。
for(int j = x;j <= y;j++){
a[j] = 1; //标记建地铁的区域
}
}
```
如果该坐标为建地铁的区域(`a[i]==1`)那么树的数目减一(`--l1`).
`int l1=l`用于保存`l`的值,并算出马路上剩余的树的数目。
```
int l1 = l;
for(int i = 0;i <= l;i++){
if(a[i] == 1){
--l1;
}
}
```
#### 完整的代码
```
#includeusing namespace std;
int main ()
{
int l = 0,m = 0;
cin >> l>> m;
int a[10002] = {},x = 0,y = 0;
for(int i = 1;i <= m;i++){
cin >> x >> y;
for(int j = x;j <= y;j++){
a[j] = 1;
}
}
int l1 = l;
for(int i = 0;i <= l;i++){
if(a[i] == 1){
--l1;
}
}
cout << ++l1;
return 0;
}```
###### 严禁转载和复制代码
###### 作者:➹Q
###### 如有疑问请在评论区里回复!!谢谢
2020-03-26 21:55:50 星期四
0.0分
1 人评分
这篇博客讲解了如何解决一个编程问题,即在马路长度为L且有M个地铁区域的情况下,计算移除地铁区域后马路上剩余树的数量。通过遍历区域边界并标记树位置,最后输出剩余树的数目。
1937

被折叠的 条评论
为什么被折叠?



