输入
500 3
100 200
150 300
470 471
输出
298
【提交地址】
简单思路
初始化一个全false的bool数组,表示树未被移走,然后根据输入值将数组内的对应序号值设为true表示已经移走。
最后统计false的数目即为剩下的树数。
#include <cstdio>
#include <string>
#include <map>
using namespace std;
int main() {bool Tree[10001]= {false};int L,left, right, n;scanf("%d %d",&L,&n);for (int i = 0; i < n; ++i) {scanf("%d %d",&left,&right);for (int j = left; j <= right; ++j) {Tree[j]= true;}}int counts = 0;for (int i = 0; i <= L; ++i) {if (!Tree[i]){counts++;}}printf("%d",counts);return 0;
}
这里需要注意一个细节,关于数组的初始化,int类型数组可以全部初始化为0,bool数组可以全部初始化为false,如下所示:
int a[1145] = {0};
bool b[1451] = {false};
但是,想要初始化其他的值,无法使用上面的逻辑,可以参考这篇博文:
【【C++的一个坑】int数组初始化为全0和全1,bool数组初始化为全false和全true】。