问题标题: 酷町堂:1413

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,end=-1,cnt;
struct hh{
    int l,r;
}a[150];
bool cmp(hh x,hh y){
    return x.r<y.r;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i].l>>a[i].r;
    end=a[1].r;
    for(int i=2;i<=n;i++){
        if(a[i].l<=end){
            cnt++;
        }
        end=a[i].r;
    }
    cout<<n-cnt;
    return 0;
}/*
输入(显示前50行):
5
1 6
8 8
8 8
7 9
4 7
输出(显示前50行):
2
*/ 

50分求助

陈曦在2021-05-11 17:20:38追加了内容


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

思路

现将区间按结束时间排序,之后遍历所有区间,如果当前区间的开始时间,大于之前记录的时间,就将记录的时间更新为当前区间的结束时间,计数器+1

核心

int end=-1;
    for(int i=1;i<=n;i++){
        if(a[i].s>end){//需要更新(在选一个点)
            end=a[i].e;
            ans++;
        }
    }

如果你看不懂

我要回答