Stall Reservations

原文是English,这里直接上中文吧

Descriptions:

这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于必须在[A,B ]的时间内产奶(1 <= A <= B <= 1,000,000)当然, FJ必须为他们创造一个决定挤奶时间的系统.当然,没有牛想与其他奶牛分享这一时光

帮助FJ做以下事:

  • 使每只牛都有专属时间的最小牛棚数
  • 每只牛在哪个牛棚

也许有很多可行解。输出一种即可,采用SPJ


Input

第一行一个数字 N

第 2..N+1行: 第 i+1行 描述了i号奶牛挤奶的起止时间


Output

第一行:牛棚最小数量

Lines 2..N+1: 第 i+1行 描述了i奶牛被安排的牛棚

Sample Input
5
1 10
2 4
3 6
5 8
4 7
Sample Output
4
1
2
3
2
4
题目链接:
 
这题考查的是贪心算法,做这题要考虑两点:1、要对母牛开始挤奶的时间进行排序。2、要知道畜栏是否能使用,在没有合适畜栏的时候加上一个。

首先,把所有奶牛按挤奶开始时间从小到大排序。
然后,为第一头奶牛分配一个畜栏。
最后,依次处理后面每头奶牛i。处理i时,考虑已分配畜栏中,结束时间最早的畜栏x。如何处理详情见代码

露要用优先队列存放已经分配的畜栏,并使得结束时间最早的畜栏始丝列头部

AC代码:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define ME0(x) memset(x,0,sizeof(x))
using namespace std;
struct cow//奶牛
{
int s,e;//挤奶时间的开始与结束
int no;//奶牛编号
//以挤奶时间小的规则排序
bool operator < (const cow & c) const
{
return s<c.s;
}
};
cow cows[];
int pos[];//记录每头牛在哪个畜栏
struct stall//畜栏
{
int over;//畜栏使用结束时间
int No;//畜栏编号
//以畜栏使用结束时间小的规则排序
bool operator<(const stall & c) const
{
return over>c.over;//优先队列排序相反
}
stall(int over,int No):over(over),No(No){}
};
priority_queue<stall> q;//优先队列
int main()
{
int N;
int total=;//总的畜栏数
cin>>N;
for(int i=; i<N; ++i)
{
cin>>cows[i].s>>cows[i].e;
cows[i].no=i;
}
sort(cows,cows+N);
// for(int i=0; i<N; i++)
// cout<<cows[i].s<<cows[i].e<<endl;
for(int i=; i<N; ++i)
{
if(q.empty())//没有畜栏的情况
{
++total;
q.push(stall(cows[i].e,total));
pos[cows[i].no]=total;
}
else
{
stall st=q.top();
if(st.over<cows[i].s)//有畜栏且畜栏结束使用时间小于奶牛开始挤奶的时间
{
q.pop();
q.push(stall(cows[i].e,st.No));
pos[cows[i].no]=st.No;
}
else//有畜栏且畜栏结束使用时间大于/等于奶牛开始挤奶的时间
{
++total;//新增一个畜栏
q.push(stall(cows[i].e,total));
pos[cows[i].no]=total;
}
}
}
cout<<total<<endl;
for(int i=; i<N; ++i)
cout<<pos[i]<<endl;
}

【POJ - 3190 】Stall Reservations(贪心+优先队列)的更多相关文章

  1. poj 3190 Stall Reservations 贪心 + 优先队列

    题意:给定N头奶牛,每头牛有固定的时间[a,b]让农夫去挤牛奶,农夫也只能在对应区间对指定奶牛进行挤奶, 求最少要多少个奶牛棚,使得在每个棚内的奶牛的挤奶时间不冲突. 思路:1.第一个想法就是贪心,对 ...

  2. POJ 3190 Stall Reservations贪心

    POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...

  3. POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)

    Stall Reservations Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one w ...

  4. POJ 3190 Stall Reservations (优先队列)C++

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7646   Accepted: 271 ...

  5. poj 3190 Stall Reservations

    http://poj.org/problem?id=3190 Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Su ...

  6. POJ 3190 Stall Reservations【贪心】

    POJ 3190 题意: 一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作.给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器.思路:先按奶牛要求的时间起始点进行从小到大排序 ...

  7. POJ -3190 Stall Reservations (贪心+优先队列)

    http://poj.org/problem?id=3190 有n头挑剔的奶牛,只会在一个精确时间挤奶,而一头奶牛需要占用一个畜栏,并且不会和其他奶牛分享,每头奶牛都会有一个开始时间和结束时间,问至少 ...

  8. POJ 3190 Stall Reservations 【贪心 优先队列】

    题意:给出n头牛必须单独占用一台机器的时间段,问至少需要多少台机器 先按照每头牛的时间的x来排序,然后用一个优先队列(优先选取最小的)维护已经喂好的牛的最小的结束时间 比如现在优先队列里面有m头牛已经 ...

  9. poj3190 Stall Reservations (贪心+优先队列)

    Cleaning Shifts Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

  10. [USACO06FEB] Stall Reservations 贪心

    [USACO06FEB] Stall Reservations 贪心 \(n\)头牛,每头牛占用时间区间\([l_i,r_i]\),一个牛棚每个时间点只能被一头牛占用,问最少新建多少个牛棚,并且每头牛 ...

随机推荐

  1. HTML5与Javascript 实现网页弹球游戏

    终于效果图: 1. 使用html 5 的canvas 技术和javascript实现弹球游戏 总体流程图: 1.1 html5 canvas技术的使用 首先在html页面中定义画布. <canv ...

  2. v-bind指令

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Android手机摇一摇的实现SensorEventListener

    Android手机摇一摇的实现SensorEventListener 看实例 package com.example.shakeactivity; import android.content.Con ...

  4. 细谈SetButtonInfo函数及其用途

    SetButtonInfo用于设置某个按钮,它的接口定义如下: 下面是它的几个接口函数说明: void CToolBar::SetButtonInfo(int nIndex, UINT nID, UI ...

  5. Hadoop如何计算map数和reduce数

    阅读本文可以带着下面问题: 1.map和reduce的数量过多会导致什么情况? 2.Reduce可以通过什么设置来增加任务个数? 3.一个task的map数量由谁来决定? 4.一个task的reduc ...

  6. zTree async 动态参数处理

    async:{ enable: true,//开启异步机制 url: opts.url,//异步地址 otherParam: {  'plateNo': function(){ return $('# ...

  7. Netty实现时间服务演示样例

    相关知识点: [1] ChannelGroup是一个容纳打开的通道实例的线程安全的集合,方便我们统一施加操作.所以在使用的过程中能够将一些相关的Channel归类为一个有意义的集合.关闭的通道会自己主 ...

  8. python模拟登陆discuz论坛

    #! /usr/bin/env python # -*- coding: utf-8 -*- import urllib2, urllib, cookielib, re, time class Rob ...

  9. docker pure-ftp 搭建ftp服务器

    参考:https://hub.docker.com/r/stilliard/pure-ftpd/ docker-compose.yml: ftp: image: stilliard/pure-ftpd ...

  10. HDU 1081:To The Max

    To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...