凌乱的yyy / 线段覆盖

P1803 凌乱的yyy / 线段覆盖 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

解题思路
1.创建结构体变量,储存每个比赛的开始和结束时间 
2.为了使参加的比赛尽可能多,所以必须参加最早结束的比赛,用sort函数将数组按结束时间排序
3.创建变量m为上一个num,m最初为1,num储存最小大于等于结束时间的比赛,num最初为2。m=1,因为第一项结束时间最早;num=2,使得下一个结束时间最早,这样才能得到最优解 
4.从num开始遍历,如果第num个比赛的开始时间大于等于第m个比赛的结束时间,参加的比赛数目+1;如果第num个比赛的开始时间小于第m个比赛的结束时间,num+1 
5.输出最多参加的比赛数目 

代码

#include<bits/stdc++.h>
using namespace std;
struct exam{
	int x;
	int y;
}t[3000005];//创建结构体变量 
bool cmp(exam a,exam b)
{
	return a.y<b.y;
}//对比函数 
int main()
{
	int n,a,b,num=2,m=1,sum=1;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b;
		t[i].x=a;//开始时间 
		t[i].y=b;//结束时间 
	}
	sort(t+1,t+n+1,cmp);//sort排序 
	while(num<=n)
	{
		if(t[m].y<=t[num].x)
		{
			m=num;
			sum++;
		}//第num个比赛的开始时间大于第m个比赛的结束时间 
		num++;
	}
	cout<<sum;//输出最多参加的比赛数目
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值