Stall Reservations
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 3106   Accepted: 1117   Special Judge

Description

Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A..B (1 <= A <= B <= 1,000,000), which includes both times A and B. Obviously, FJ must create a reservation system to determine which
stall each cow can be assigned for her milking time. Of course, no cow will share such a private moment with other cows. 



Help FJ by determining:

  • The minimum number of stalls required in the barn so that each cow can have her private milking period
  • An assignment of cows to these stalls over time

Many answers are correct for each test dataset; a program will grade your answer.

Input

Line 1: A single integer, N 



Lines 2..N+1: Line i+1 describes cow i's milking interval with two space-separated integers.

Output

Line 1: The minimum number of stalls the barn must have. 



Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period.

Sample Input

5
1 10
2 4
3 6
5 8
4 7

Sample Output

4
1
2
3
2
4

Hint

Explanation of the sample: 



Here's a graphical schedule for this output:

Time     1  2  3  4  5  6  7  8  9 10

Stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>>

Stall 2 .. c2>>>>>> c4>>>>>>>>> .. ..

Stall 3 .. .. c3>>>>>>>>> .. .. .. ..

Stall 4 .. .. .. c5>>>>>>>>> .. .. ..

Other outputs using the same number of stalls are possible.

Source

/*
** 用堆维护的贪心题。先依照開始时间排序。再将牛依次放入堆里。放入之前更新堆顶元素。
** TLE到吐。。。
*/ #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue> #define maxn 50010
using namespace std; struct Node2 {
int num, u, v;
friend bool operator<(const Node2& a, const Node2& b) {
return a.v > b.v;
}
} cow[maxn];
int ans[maxn]; bool cmp(const Node2& a, const Node2& b) {
return a.u < b.u;
} int main() {
int N, i, j, sum, u, v, flag;
Node2 tmp;
while(scanf("%d", &N) == 1) {
sum = 0;
for(i = 0; i < N; ++i) {
scanf("%d%d", &u, &v);
cow[i].num = i + 1;
cow[i].u = u;
cow[i].v = v;
ans[i + 1] = 0;
}
sort(cow, cow + N, cmp); priority_queue<Node2> PQ;
PQ.push(cow[0]);
ans[cow[0].num] = ++sum; for(i = 1; i < N; ++i) {
tmp = PQ.top();
if(cow[i].u > tmp.v) {
tmp.v = cow[i].v;
ans[cow[i].num] = ans[tmp.num];
PQ.pop(); PQ.push(tmp);
} else {
ans[cow[i].num] = ++sum;
PQ.push(cow[i]);
}
} printf("%d\n", sum);
for(i = 1; i <= N; ++i)
printf("%d\n", ans[i]);
}
return 0;
}

超时代码1:

#include <stdio.h>
#include <string.h>
#include <algorithm> #define maxn 50010
using std::sort; struct Node {
int u, v;
} E[maxn];
struct Node2 {
int num, u, v;
} cow[maxn];
int ans[maxn]; bool cmp(const Node2& a, const Node2& b) {
return a.u < b.u;
} int main() {
int N, i, j, sum, u, v;
while(scanf("%d", &N) == 1) {
sum = 0;
for(i = 0; i < N; ++i) {
scanf("%d%d", &u, &v);
cow[i].num = i + 1;
cow[i].u = u;
cow[i].v = v;
}
sort(cow, cow + N, cmp); for(i = 0; i < N; ++i) {
E[i].v = 0;
for(j = 0; j <= i; ++j) {
if(cow[i].u > E[j].v) {
if(!E[j].v) ++sum;
E[j].v = cow[i].v;
E[j].u = cow[i].u;
ans[cow[i].num] = j + 1;
break;
}
}
} printf("%d\n", sum);
for(i = 1; i <= N; ++i)
printf("%d\n", ans[i]);
}
return 0;
}

超时代码2:

#include <stdio.h>
#include <string.h>
#include <algorithm> #define maxn 50010
using std::sort; struct Node {
int u, v;
} E[maxn];
struct Node2 {
int num, u, v;
} cow[maxn];
int ans[maxn]; bool cmp(const Node2& a, const Node2& b) {
return a.u < b.u;
} int main() {
int N, i, j, sum, u, v, flag;
while(scanf("%d", &N) == 1) {
sum = 0;
for(i = 0; i < N; ++i) {
scanf("%d%d", &u, &v);
cow[i].num = i + 1;
cow[i].u = u;
cow[i].v = v;
ans[i + 1] = 0;
}
sort(cow, cow + N, cmp); for(i = 0; i < N; ++i) {
if(ans[cow[i].num]) continue;
ans[cow[i].num] = ++sum;
flag = cow[i].v;
for(j = i + 1; j < N; ++j)
if(!ans[cow[j].num] && cow[j].u > flag) {
flag = cow[j].v;
ans[cow[j].num] = sum;
}
} printf("%d\n", sum);
for(i = 1; i <= N; ++i)
printf("%d\n", ans[i]);
}
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

POJ3190 Stall Reservations 【贪婪】的更多相关文章

  1. POJ--3190 Stall Reservations(贪心排序)

    这里 3190 Stall Reservations 按照吃草时间排序 之后我们用 优先队列维护一个结束时间 每次比较堆顶 看是否满足 满足更新后放到里面不满足就在后面添加 #include<c ...

  2. poj3190 Stall Reservations(贪心+STL)

    https://vjudge.net/problem/POJ-3190 cin和scanf差这么多么..tle和300ms 思路:先对结构体x升序y升序,再对优先队列重载<,按y升序. 然后依次 ...

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

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

  4. poj3190 Stall Reservations

    我一开始想用线段树,但是发现还要记录每头cow所在的棚...... 无奈之下选择正解:贪心. 用priority_queue来维护所有牛棚中结束时间最早的那个牛棚,即可得出答案. 注意代码实现的细节. ...

  5. POJ3190 Stall Reservations 贪心

    这是个典型的线程服务区间模型.一些程序要在一段时间区间上使用一段线程运行,问至少要使用多少线程来为这些程序服务? 把所有程序以左端点为第一关键字,右端点为第二关键字从小到大排序.从左向右扫描.处理当前 ...

  6. 【POJ - 3190 】Stall Reservations(贪心+优先队列)

    Stall Reservations 原文是English,这里直接上中文吧 Descriptions: 这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于 ...

  7. poj 3190 Stall Reservations

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

  8. poj3190 stall revertation

                                                                                                Stall Re ...

  9. BZOJ1651: [Usaco2006 Feb]Stall Reservations 专用牛棚

    1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 509  Sol ...

随机推荐

  1. LEAVE LIST-PROCESSING和LEAVE TO LIST-PROCESSING事件的作用

    START-OF-SELECTION. MESSAGE '屏幕报错' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. 这样子的话 报错会返回包选择屏 ...

  2. 如何在Linux上检查SSH的版本(转)

    SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00). 事实上,SSH1和SSH2是两个完全不同互不兼容的协议.SSH2明显地 ...

  3. 基于visual Studio2013解决面试题之0202上下排

     题目

  4. boost.asio系列——io_service

    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...

  5. boost.asio包装类st_asio_wrapper开发教程(2014.5.23更新)(一)-----转

    一:什么是st_asio_wrapper它是一个c/s网络编程框架,基于对boost.asio的包装(最低在boost-1.49.0上调试过),目的是快速的构建一个c/s系统: 二:st_asio_w ...

  6. Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]

      英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快 ...

  7. read table 时关键字TRANSPORTING NO FIELDS的用法

    关键字TRANSPORTING NO FIELDS 用于read table with key 一般用于等读取内表的时候,只是判断该内表中是否有次数据 不需要读取到工作区中. READ TABLE g ...

  8. Linux下限制Shell:Rssh和Scponly

    限制Shell,正如Rsh和Scponly让系统管理员限制Linux用户可以做哪些操作,你可以创建用户,将被允许通过Scp复制文件,但不会被允许登录到系统的命令行.这是非常重要的安全功能,应考虑每个系 ...

  9. 积累的VC编程小技巧之视图

    1.如何得到视图指针 [问题提出]    现在你有一个多线程的Demo,你想在多线程里处理视图指针里的函数,我们给这个函数起个名字:Put();该如何实现呢?   //有两种方法可以实现你的要求:   ...

  10. POJ 1160 Post Office (动态规划)

    Post Office Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15412   Accepted: 8351 Desc ...