原题传送门
思路:区间贪心题,先定义一个构造体来存储开始和结束的时间,然后定义一个函数来将结束时间由小到大排序,接着就遍历排序后的每一个结束时间,越早结束的且满足条件的就参加,最后输出次数即可
代码参考
#include<bits/stdc++.h>
using namespace std;
struct Match//使用结构体将比赛的开始时间和结束时间保存下来
{
int start;//开始时间
int end;//结束时间
}M[1000000];
bool compare(Match x, Match y)//以结束时间从小到大排序
{
return x.end < y.end;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>M[i].start>>M[i].end;
sort(M,M+n,compare);
int pos = 0; //上一场比赛的结束时间
int num=0;//能够参加比赛的次数
for(int i=0;i<n;i++)
{
if(pos<=M[i].start)
{
pos = M[i].end;
num++;
}
}
cout<<num;
return 0;
}