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;
    }
  • 相关阅读:
    3、SpringBoot执行原理
    10、@Controller跟@RestController注解的使用
    2、Spring项目的创建【官网跟IDEA】
    1、了解SpringBoot
    PHP算法之IP 地址无效化
    PHP算法之宝石与石头
    MYSQL查询查找重复的电子邮箱
    PHP算法之猜数字
    PHP算法之盛最多水的容器
    PHP算法之回文数
  • 原文地址:https://www.cnblogs.com/xiaowangdatie/p/14524279.html
Copyright © 2011-2022 走看看