题解 luogu P1803 【凌乱的yyy】

这题是一个基本的贪心思想,由于我们要让一个比赛给后面的比赛空出尽可能多的时间,我们要让每个出现在日程表上比赛的结束时间越早越好。

先排序,再根据结束时间顺序选择。

#include<bits/stdc++.h>
using namespace std;
int a[1010000][3];
void haha(int l,int r)
{
  int i,j,x,y,n;
  x=a[(l+r)/2][2];i=l;j=r;
  do{
  while(a[i][2]<x)i++;
  while(a[j][2]>x)j--;
  if (i<=j)
  {swap(a[i][1],a[j][1]);swap(a[i][2],a[j][2]);i++;j--;}
  }while(i<=j);
  if (i<r)haha(i,r);
  if (j>l)haha(l,j);
}//以活动时间结束先后顺序快排 
int main()
{
  int i,j,x=0,n,y=0;
  cin>>n;
  for (i=1;i<=n;i++)cin>>a[i][1]>>a[i][2];//分别读入开始与结束时间 
  haha(1,n);//快排 
  for (i=1;i<=n;i++)
      if (a[i][1]>=y)//如果遇上一个活动为重叠,选择结束时间早的 
      {x++;y=a[i][2];}//总数加一 
  cout<<x;
  return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_39441542/article/details/84675222