• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

P1047 校门外的树

P1047 校门外的树


题目描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,…,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

输入格式
第一行有2个整数L(1≤L≤10000)和M(1≤M≤100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。
接下来的MM行每行包含22个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

输出格式
11个整数,表示马路上剩余的树的数目。

输入输出样例
输入
500 3
150 300
100 200
470 471
输出
298
说明/提示
NOIP2005普及组第二题

对于20%的数据,区域之间没有重合的部分;

对于其它的数据,区域之间有重合的情况。

 

 1 解法:
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     /*思路:
 8         1:初始化数组全为0,接着输入n组 left,right区间
 9         2:判断区间的边界 是否时已经移开,移开标记为1,未移开标记为0
10         3:从左边界left-到right ,只要未被标记未1,那么就标记未1
11         4:遍历数组,看有多少是0 的,输出sum
12     */
13     int data[10001]={0};
14     int Len,n;
15     cin>>Len>>n;
16     int left,right;
17     int sum=0;
18     for(int i=0;i<n;i++){
19         cin>>left>>right;
20         for(int j=left;j<=right;j++){
21               if(data[j]!=1) data[j]=1;
22         }
23     }
24     for(int i=0;i<=Len;i++){
25         if(data[i]==0) sum++;
26     }
27     cout<<sum<<endl;
28     return 0;
29 }

 

 

 

 

posted @ 2019-12-09 13:22  Nirogo  阅读(279)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3