zoukankan      html  css  js  c++  java
  • Day 8 acwing打卡 422.校门外的树

    某校大门外长度为 LL 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。

    我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 LL 的位置;数轴上的每个整数点,即 012L0,1,2,……,L,都种有一棵树。

    由于马路上有一些区域要用来建地铁。

    这些区域用它们在数轴上的起始点和终止点表示。

    已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。

    现在要把这些区域中的树(包括区域端点处的两棵树)移走。

    你的任务是计算将这些树都移走后,马路上还有多少棵树。

    输入格式

    输入文件的第一行有两个整数 LL 和 MM,LL 代表马路的长度,MM 代表区域的数目,LL 和 MM 之间用一个空格隔开。

    接下来的 MM 行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

    输出格式

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

    数据范围

    1L100001≤L≤10000,
    1M1001≤M≤100

    输入样例:

    500 3
    150 300
    100 200
    470 471
    

    输出样例:

    298

    #include<iostream>
    using namespace std;
    
    int L,M;
    
    int main(){
        
        cin >> L >> M;
        bool tree[10010];
        
        for(int i = 0; i <= L; i++)
            tree[i] = true;
            
        int a, b;
        for(int i = 0; i < M; i++)
        {
            cin >> a >> b; 
            for(int j = a; j <= b; j++)
            {
                tree[j] = false;
            }
        }
        
        int sum = 0;
        for(int i = 0; i <= L; i++)
            if(tree[i])
                sum++;
                
        cout << sum;
        return 0;
    }

    另一种方法是区间合并,例如[2,3] [3,5]可以合并为[2,5]

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    typedef pair<int,int> pii;
    bool tree[10010];
    int L,M;
    
    int main(){
        
        cin >> L >> M;
        for(int i = 0; i <= L; i++)
            tree[i] = true;
        
        
        pii p[110];
        
        int a, b;
        for(int i = 0; i < M; i++)
        {
            cin >> a >> b; 
            p[i].first = a;
            p[i].second = b;
        }
        
        sort(p,p+M);
        
        int l = p[0].first, r = p[0].second, sum = 0;
        
        for(int i = 1; i < M; i++)
        {
            if(p[i].first <= r)
                r = max(p[i].second,r);
            else{
                sum += r - l + 1;
                l = p[i].first; 
                r = p[i].second;
            }
        }
        
        sum += r - l + 1;
        cout << L + 1 - sum;
        
        return 0;
    }
  • 相关阅读:
    两道简单的机试题目
    C#二维数组(矩形数组,交错数组)
    用实例展示left Join,right join,inner join,join,cross join,union 的区别
    React 中的 Redux 详解:
    react 组件通信:
    vue 入门, todoList
    Vue 动画
    vue 框架,入门必看
    koa2 的使用方法:(一)
    git 的使用:
  • 原文地址:https://www.cnblogs.com/xiaowangdatie/p/14524279.html
Copyright © 2011-2022 走看看