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

C语言 题目:校门外的树

题目来自洛谷P1047 [NOIP2005 普及组] 校门外的树

题目描述

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

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

输入格式

第一行有两个整数,分别表示马路的长度 l 和区域的数目 m。

接下来 m 行,每行两个整数 u,v,表示一个区域的起始点和终止点的坐标。

输出格式

输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。

输入输出样例

输入

500 3
150 300
100 200
470 471

输出

298

   

#include <stdio.h>
int c[10001];                                                      //在函数外建立数组,在函数内由于数组过大无法建立
int main (void)
{ 
    int l, m;                                                      //l马路的长度,m建地铁区域的数目
    c[0] = 0;                                                      //数组赋初始值
    int n = 0;                                                     //剩余的长度
    scanf_s("%d%d", &m,&l);
    int a[100]={0}, b[100] = {0};                                  //建立数组为100个,建地铁区域的数目最大100个
    for (int i = 0; i < l; i++)                                             
    {
        scanf_s("%d%d", &a[i], &b[i]);                             //输入地铁起始a[i],地铁终止b[i]
        for (int j = a[i]; j <= b[i]; j++)            c[j] = 1;    //将起始到终止(包括端点)的值建立为所对应的数组挨个赋值为1
    }
    for (int i = 0; i <= m; i++)                                   //判断数组是否为0,为0则说明该位置不在建地铁的范围内
    {
        if (c[i] == 0)            n++;
    }
    printf("%d",n);                                                //输出n
    return 0;
}

 

posted @ 2022-11-16 17:26  通通的后花园  阅读(163)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3