P1803 凌乱的yyy / 线段覆盖

再一次感动我妈一整年,关于两个数据联系起来排序的感想emm


在这里插入图片描述


在这里插入图片描述
主要还是思维题,考察贪心和排序,思路:要想最多,就得尽量考早结束的场次,所以以结束时间为标准排序,从小到大遍历一遍,如果开始时间>=参加的上场的结束时间,ans++,ans最小为1,最少参加一场是结束最早的那一场

*ps:对于两个东东关联起来按照某一方式排序,很容易想到结构体+sort
但是,还有一种方法,让一个数(a)较大的数(常数)+另一个数(b),当然常数足够大,且b足够小以至于总体的大小受乘的两个因子控制,然后再用取余和除来提取两个数,还是很有意思的

**

话不多说,上ac代码(刚开始用第二种方法写,纵使wrong,题给数据太大,容易爆,所以不再尝试,然后用结构体写出来了,开心)

**

#include <bits/stdc++.h> //万能头文件
using namespace std;  //命名空间
struct bj{
	int a,b;
}s[100005];  //开个大个结构体数组
bool cmp(bj x, bj y)
{return x.b<y.b;  //定义排序的方式,从小到大
}
int main()
{
	int n,x,ans=1;
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>s[i].a>>s[i].b;
	sort(s,s+n,cmp);
	x=s[0].b;
	for(int i=0;i<n;i++)      //遍历
	{
		if(s[i].a>=x)
		{ans++;
		x=s[i].b;
		}
	}
	cout<<ans;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值