1061: 路旁的树 [模拟]
时间限制: 1 Sec 内存限制: 128 MB提交: 213 解决: 23 统计
题目描述
正当杨八方选择了河南理工大学之时,河南理工的校园内,也在装扮校园以便迎接新生。
河南理工大学有一条“春秋大道”,其道路两旁对称地栽有树木。现在为了保证整体的美观,需要移除其中的一些树。因此有必要统计,在移除一些树木之后,春秋大道上还有多少棵树。
为了简化问题,把春秋大道想象成一条数轴,数轴坐标为 1∼n 。
尚未进行移除操作时,每个坐标点上有两棵树。
给一次移除操作( x y ),将会把 [x,y] 区间上所有的树移除。
最终需要统计,在所有移除操作完成以后,还剩有多少棵树。
输入
第一行为一个整数 n ( 1≤n≤1000 )。
第二行为一个整数 k ( 1≤k≤100 ),代表移除操作的个数。
下面 k 行,每行有两个整数 x , y ( 1≤x≤y≤n ),中间有一个空格分隔开,代表把 [x,y] 区间上的所有树移除。
输出
输出所有移除操作完成之后,道路两旁还剩树的数目总数。
样例输入
5
2
1 3
4 5
样例输出
0
解析:
因为区间可能重复,所以需要用数组把移除过的区间标记,下次遇到这个区间就不再统计
程序如下:
#include<cstdio> #include<cstring> int vis[1010]; //标记数组 int main() { int n; int i,k,a,b; while(scanf("%d",&n)!=EOF) { int sum=n; memset(vis,0,sizeof(vis)); scanf("%d",&k); while(k--) { scanf("%d%d",&a,&b); for(i=a; i<=b; i++) { if(!vis[i]) { vis[i]=1; //首先标记 sum--; } } } printf("%d\n",sum*2); } return 0; }