PTA 会场安排问题 贪心
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 会场安排问题 贪心相关的知识,希望对你有一定的参考价值。
输入
5
1 23
12 28
25 35
27 80
36 50
输出
3
分别从小到大排序所有开始时间和结束时间。
循环遍历所有开始时间a[i]:若开始时间a[i]>=结束时间b[j],说明可以沿用这个会场,结束时间的指针往后移(j++),因为沿用了这个会场之后这个会场的新结束时间一定在当前结束时间的后面(新结束时间>当前比较的场次的开始时间>=原来的结束时间),至于它是多少或在哪里,我们并不关心(反正就在后面就对了),我们只关心它不用增加场次。即,j指针往后移代表当前场次的新结束时间。
若开始时间a[i]<结束时间b[j],说明要再加一个场。 当前的场(j指针所指向的场)还能用,因为随着i++,开始时间变大,还可以沿用当前场次。
#include<bits/stdc++.h>
using namespace std;
#define fir(i,a,n) for(int i=a;i<n;i++)
//参考:https://blog.csdn.net/qq_42898536/article/details/109541922
//======================
const int N=2e5+10;
int a[N],b[N];
int main()
{
int n;cin>>n;
fir(i,1,n) cin>>a[i]>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
int ans=0,j=1;
fir(i,1,n)
{
if(a[i]<b[j]) //开始时间小 说明不能跟在b后面 要自己加一场 加的场在b后面
{
ans++;
}
else
{
j++;
}
}
cout<<ans;
return 0;
}
以上是关于PTA 会场安排问题 贪心的主要内容,如果未能解决你的问题,请参考以下文章