仍然是acm的基础题。。简单的数组运算,状态模拟
但是伟大往往不都是从菜鸟开始的么哈哈。。
本人菜鸟一枚,决心入了acm的坑
每周更新poj5-8题,欢迎监督,题是我分好类来刷的,有兴趣的同学可以和我一起。欢迎交流~
这道题的注意都写在注释里了咯
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int L, M;
int main(){
scanf("%d%d", &L, &M);
//用一个Bit来表示一个区域节省空间,1表示有树,同时记得略微扩大数组以防止越界
char pos[L+10];
memset(pos, 1, sizeof(pos));
int a, b;
for(int i = 0; i < M; i++){
scanf("%d%d",&a,&b);
//这里采用位运算增强计算效率
for(int i = a; i <= b; i++){
//printf("%c",pos[i]);
pos[i] &= 0;
}
}
int count = 0;
//尤其要注意这个地方,注意考虑从0开始到L的两端点情况
for(int i = 0; i <= L; i++){
if(pos[i])
++count;
}
printf("%d",count);
return 0;
}