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 ...
随机推荐
- hdu 4704 同余定理+普通快速幂
此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16.... 这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大, ...
- javascript (十三) 函数
JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { 这里是要执行的代码 } 当调用该函数时,会执行 ...
- javacsript (十) 数据类型
类型声明的时候,直接使用 var varname=xxx 数字.字符.布尔,声明都直接使用var就可以, JavaScript 数组 下面的代码创建名为 cars 的数组: var cars=new ...
- javascript 判断微信浏览器
原文:javascript 判断微信浏览器 用js判断当前环境是否是是微信内置浏览器有两个方法: 1.判断useragent 2.判断是否支持微信内置浏览器才支持的一些方法,比如WeixinJSBri ...
- 【Demo 0003】Java基础-数组
本章学习要点: 1. 了解数组的基本概念: 2. 掌握数组使用方法: 一.数组的基本概念 1. 数组定义: 同一数据类型数据的集合,在 ...
- IE6_一些简单bug
1.IE6调整窗口大小的 Bug 当把body居中放置,改变IE浏览器大小的时候,任何在body里面的相对定位元素都会固定不动了.给body定义position:relative;就行了. 2.避免百 ...
- jquery 拓展方法
摘抄自(http://hi.baidu.com/jjjvzugcpmcdmor/item/0e32a89c36a18544f04215d7) $.fn是指jquery的命名空间,加上fn上的方法及属性 ...
- exe解析
IMAGE_DOS_HEADER size 0x40 e_lfanew 0xe0 当中有0xA0的间隔数据. IMAGE_NT_HEA ...
- DataReader和DataSet的区别以及使用
DataReader和DataSet这两个对象都可以将检索的关系数据存储在内存中.它们在功能使用方面非常相似,但是它们不可以相互替换. 主要区别如表所示: DataReader DataSet 数 ...
- wordpress搭建后地址栏页面显示IP地址的问题
搭建了wordpress.也在万网加入了A记录,这时訪问站点(我的是yesareno.com),发现仅仅在yesareno的主页,地址栏是域名.点击进入其它界面发现地址栏变成了ip地址,例如以下图 竟 ...