POJ3190 Stall Reservations 【贪婪】
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 3106 | Accepted: 1117 | Special Judge |
Description
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
Lines 2..N+1: Line i+1 describes cow i's milking interval with two space-separated integers.
Output
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
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 【贪婪】的更多相关文章
- POJ--3190 Stall Reservations(贪心排序)
这里 3190 Stall Reservations 按照吃草时间排序 之后我们用 优先队列维护一个结束时间 每次比较堆顶 看是否满足 满足更新后放到里面不满足就在后面添加 #include<c ...
- poj3190 Stall Reservations(贪心+STL)
https://vjudge.net/problem/POJ-3190 cin和scanf差这么多么..tle和300ms 思路:先对结构体x升序y升序,再对优先队列重载<,按y升序. 然后依次 ...
- poj3190 Stall Reservations (贪心+优先队列)
Cleaning Shifts Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) To ...
- poj3190 Stall Reservations
我一开始想用线段树,但是发现还要记录每头cow所在的棚...... 无奈之下选择正解:贪心. 用priority_queue来维护所有牛棚中结束时间最早的那个牛棚,即可得出答案. 注意代码实现的细节. ...
- POJ3190 Stall Reservations 贪心
这是个典型的线程服务区间模型.一些程序要在一段时间区间上使用一段线程运行,问至少要使用多少线程来为这些程序服务? 把所有程序以左端点为第一关键字,右端点为第二关键字从小到大排序.从左向右扫描.处理当前 ...
- 【POJ - 3190 】Stall Reservations(贪心+优先队列)
Stall Reservations 原文是English,这里直接上中文吧 Descriptions: 这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于 ...
- poj 3190 Stall Reservations
http://poj.org/problem?id=3190 Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Su ...
- poj3190 stall revertation
Stall Re ...
- BZOJ1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 509 Sol ...
随机推荐
- mysql基础: mysql列类型--字符串
mysql列类型:整型 http://blog.csdn.net/jk110333/article/details/9342283 mysql列类型--时间和日期 http://blog.csd ...
- Ural 1073 Square Country (DP)
题目地址:Ural 1073 DP水题.也能够说是背包. #include <iostream> #include <cstdio> #include <string&g ...
- Python - 定制pattern的string模板(template) 具体解释
定制pattern的string模板(template) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28625179 ...
- 所有CM_消息的说明
这些CM消息,居然在Delphi的帮助里是没有任何说明的,真是昏倒.意外在高手的书里找到了所有说明,说明如下: Message Constant Value Description cm_Base $ ...
- 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...
- C#控件系列--文本类控件
C#控件系列--文本类控件 文本类控件主要包含Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能 Label用来 ...
- OleContainer操作Excel以二进制方式读写数据库
需求源头:OleContainer操作Excel,想把Excel以二进制方式存入数据库,并且以二进制方式读取存入流:Procedure SaveToStream(ADOTable1: TAdoTabl ...
- SQLite中如何用api操作BLOB类型的字段
在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等.对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此SQLite提供了一组函数来处理 ...
- 打造你自己ajax上传图片
今天,我们需要的图片上传插件,但是,互联网不提供符合他们的需要和易于使用的.所以我写了自己. 方法1,只使用jquery代码,.代码例如以下 <p> <label>上传图片&l ...
- AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...