题解:这是洛谷的第14道题目,还是考察数组的运用。
问题点
1 . 注意输入区域的起始点和结束点有重叠的情况
2 . 我们可以这样做。树木的索引值一开始被置为1,在第一个区域的起始点(包含)和结束点(包含)内的树木都置为0(代表要移走的数目),在第二个的区域的起始点(包含)和结束点(包含)内的树木都置为0(代表要移走的数目),已经被置为0的树木忽略···直到最后一个区域的起始点和结束点。然后没有被置为0的树木即为剩余的树木。
源代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int L, M, sum = 0;
cin >> L >> M;
// define
int *LSum = new int[L];
int **Area = new int*[M];
for (size_t i = 0; i < M; i++)
Area[i] = new int[2];
// get value
for (size_t i = 0; i <= L; i++)
{
if (i == 0)
LSum[i] = 11000;
else
LSum[i] = i;
}
for (size_t i = 0; i < M; i++)
cin >> Area[i][0] >> Area[i][1];
for (size_t i = 0; i < M; i++)
for (size_t j = Area[i][0]; j <= Area[i][1]; j++)
LSum[j] = 0;
for (size_t i = 0; i <=L; i++)
if (LSum[i] != 0)
sum++;
cout << sum << endl;
system("pause");
return 0;
}