再一次感动我妈一整年,关于两个数据联系起来排序的感想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;
}