• 校门外的树


    问题 c: 校门外的树

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 6  解决: 4
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

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

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

    输入

    输入文件tree.in的第一行有两个整数L1 <= L <= 10000)和 M1 <= M <= 100),L代表马路的长度,M代表区域的数目,LM之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

    输出

    输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

    样例输入

    500 3
    150 300
    100 200
    470 471

    样例输出

    298



    解题思路:创建一个数组a[10005]用于标记每个端点的树是否在输入的区间上,最后用一个for循环判断,每有一个未被标记的树则sum++,最后输出sum
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    int a[10005];
    int sum=0;
    
    int main()
    {
        int n,m;
        while(cin>>n>>m)
        {
            memset(a,0,sizeof(a));
            sum=0;
            while(m--)
            {
                int st,en;
                cin>>st>>en;
                for(int i=st;i<=en;i++)
                {
                    a[i]=1;//让所有在区间内的树的标记值为1
                }
            }
            for(int i=0;i<=n;i++)
            {
                if(!a[i])sum++;//如果树未被标记,则sum++
            }
            cout<<sum<<endl;
        }
        return 0;
    }
    

      



  • 相关阅读:
    mysql授权grant
    实际用到的linux小方法
    rpm包与 yum 安装与卸载
    7个优秀的国内外移动端web框架(转)
    (转) 关于成为linux运维工程师需要掌握的技能
    Content-Language:en-US
    hibernate的formula如何使用
    No Hibernate Session bound to thread, and configuration does not allow creat
    spring mvc 配置
    十六进制字符串转化为byte数组
  • 原文地址:https://www.cnblogs.com/wjw2018/p/9282581.html
Copyright © 2020-2023  润新知