POJ3190 通用版三A题

挤牛奶,没反应过来,讲道理之前做优先队列的题就是为了做这道.

题目大意为给定N个牛的操作时间,问最少需要几个操作室.

按开始时间进行模拟即可\\

#include<cstdio>
#include<queue>
#include<algorithm>
#define N 1000010
using namespace std;
struct node
{
    int s;
    int e;
    int id;
    bool operator<(const node &a) const
    {
        if (e==a.e) return s>a.s; else return e>a.e;
    }
} a[N];
int cmp(node a,node b)
{
    if (a.s==b.s) return a.e<b.e;else return a.s<b.s;
}
int us[N];
int main()
{
  int n;
  while (~scanf("%d",&n))
  {
      int i,sum=1;
      priority_queue<node>q;
      for (i=1;i<=n;i++) {scanf("%d%d",&a[i].s,&a[i].e);a[i].id=i;}
      sort(a+1,a+1+n,cmp);
      q.push(a[1]);us[a[1].id]=1;
      for (i=2;i<=n;i++)
      {
          if (q.size()!=0&&q.top().e<a[i].s)
          {us[a[i].id]=us[q.top().id];q.pop();}
          else
          {sum++; us[a[i].id]=sum;}
          q.push(a[i]);
      }
      printf("%d\n",sum);
      for (i=1;i<=n;i++) printf("%d\n",us[i]);
  }
}

猜你喜欢

转载自blog.csdn.net/parkerljc/article/details/79365351