解题思路:
这里要注意到500,其实一共有501棵树,总数等于a+1(L+1)

参考代码:

#include<iostream>
#include <algorithm>
#include<vector>
using namespace std;
bool compare(const vector<int>& a,const vector<int>& b){
    return a[0]<b[0];
}
int main()
{
    int a,b;
    cin>>a>>b;
    vector<vector<int>> an;
    int index=0;
    while(index<b){
        vector<int> anc(2);
        cin>>anc[0]>>anc[1];
        an.push_back(anc);
        index++;
    }
    //排序是必须的
    sort(an.begin(),an.end(),compare);
    for(int i=0;i<b-1;i++){
        //三种情况
        //两个区间相交类似an[i]为(100,200)和an[i+1]为(150,300)这种情况下合并区间an[i+1]为(100,300)
        if(an[i][1]>an[i+1][0]&&an[i][1]<an[i+1][1]){
          an[i+1][0]=an[i][0];
        // 两个区间重合类似an[i]为(100,200)和an[i+1]为(105,150)这种情况下an[i]为(105,150)没有参考价值直接使用an[i+1]为(100,200)覆盖掉
        }else if(an[i][1]>an[i+1][0]&&an[i][1]>an[i+1][1]){
            an[i+1][0]=an[i][0];
            an[i+1][1]=an[i][1];
         // 两个区间完全不相交类似an[i]为(100,200)和an[i+1]为(300,450)这种情况下(100,200)可以直接计算结果
        }else if(an[i][1]<an[i+1][0]){
            a-=an[i][1]-an[i][0]+1;
        }
    }
    //处理最后一个特殊情况
    a-=an[b-1][1]-an[b-1][0]+1;
    cout<<a+1<<endl;
    return 0;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论