题目描述
有一个长度为整数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组整数,每组有一对数字。
输出
可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。
样例输入 Copy
4 2
1 2
0 2
11 2
1 5
4 7
0 0
样例输出 Copy
2
5
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N, M;
int a[100][2];//表示区间
int b[200]; //存储区间所有数
int final[100]; //存储结果
int s = 0; //数字b下标
int t = 0; //数组final 下标
int count = 0; //代表输入次数 用于输出
cin >> N >> M;
while(N != 0 && M != 0)
{
int sum = N + 1; //树的总数
for(int i = 0; i < M; i++) //M行区间
{
for(int j = 0; j < 2; j++)
{
cin >> a[i][j];
b[s] = a[i][j];
s++;
}
}
//排序
sort(b, b + s);//默认递增排序
final[t] = sum - (b[s - 1] - b[0] + 1);
t++;
count++; //输入次数
s = 0;//s 置为0每次从数组b下标0开始存储
//下次循环
cin >> N >> M;
}
//输出
for(int i = 0; i < count; i++)
{
cout << final[i] << endl;
}
return 0;
}