P1803 凌乱的yyy / 线段覆盖(洛谷)

原题传送门

在这里插入图片描述
在这里插入图片描述
思路:区间贪心题,先定义一个构造体来存储开始和结束的时间,然后定义一个函数来将结束时间由小到大排序,接着就遍历排序后的每一个结束时间,越早结束的且满足条件的就参加,最后输出次数即可

代码参考

#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;
}

猜你喜欢

转载自blog.csdn.net/Bertil/article/details/106795129
今日推荐