poj 3190 Stall Reservations
http://poj.org/problem?id=3190
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 3567 | Accepted: 1276 | Special Judge | ||
Description
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
分析:
这个题是说一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作。给你每头奶牛的指定时间的区间,问你最小需要多少机器。
最开始想的是以奶牛要求时间的结束点从小到大进行排序,但后来发现这样的想法是错误的。
后来经过调整,应该先按奶牛要求的时间起始点进行从小到大排序,然后维护一个优先队列,里
面以已经开始挤奶的奶牛的结束时间早为优先。然后每次只需要检查当前是否有奶牛的挤奶工作已经完成的机器即可,若有,则换那台机器进行工作。若没有,则加一台新的机器。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=;
int n,use[maxn];
struct Node
{
int l;
int r;
int pos;
bool operator <(const Node &a)const
{
if(r==a.r)
return l>a.l;
return r>a.r;
}
}a[maxn];
priority_queue<Node> q;
bool cmp(Node a,Node b)
{
if(a.l==b.l)
return a.r<b.r;
return a.l<b.l;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
a[i].pos=i;
}
sort(a,a+n,cmp);
q.push(a[]);
int now=,ans=;
use[a[].pos]=;
for(int i=;i<n;i++)
{
if(!q.empty()&&q.top().r<a[i].l)
{
use[a[i].pos]=use[q.top().pos];
q.pop();
}
else
{
ans++;
use[a[i].pos]=ans;
}
q.push(a[i]);
}
printf("%d\n",ans);
for(int i=;i<n;i++)
printf("%d\n",use[i]);
while(!q.empty())
q.pop();
}
return ;
}
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std;
struct TT
{
int x, y, id;
}a[];
int vis[];
bool cmp( TT m, TT n)
{
if((m.x<n.x) || (m.x==n.x && m.y<n.y)) return true;
return false;
}
bool operator<( TT a, TT b ){
return a.y>b.y;
}
int main()
{
int T,i;
while(~scanf("%d",&T))
{
priority_queue<TT>pp;
memset(vis,,sizeof(vis));
for(i=;i<=T;i++)
{
scanf("%d %d",&a[i].x,&a[i].y);
a[i].id = i;
}
TT now;
sort(a+,a++T,cmp);
int ans = ;
vis[a[].id]=ans;
pp.push(a[]);
for(i=; i<=T; i++)
{
now = pp.top();
if(a[i].x>now.y)
{
vis[a[i].id] = vis[now.id];
pp.pop();//取出该点;
now.y = a[i].y;//更新末尾点;
pp.push(now);
}
else
{
vis[a[i].id] = ++ans;
pp.push(a[i]);
}
}
printf("%d\n",ans);
for(int i=;i<=T;i++)
{
printf("%d\n",vis[i]);
}
}
return ;
}
poj 3190 Stall Reservations的更多相关文章
- POJ 3190 Stall Reservations贪心
POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...
- POJ 3190 Stall Reservations (优先队列)C++
Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7646 Accepted: 271 ...
- POJ 3190 Stall Reservations【贪心】
POJ 3190 题意: 一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作.给你每头奶牛的指定时间的区间(闭区间),问你最小需要多少机器.思路:先按奶牛要求的时间起始点进行从小到大排序 ...
- POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)
Stall Reservations Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one w ...
- POJ -3190 Stall Reservations (贪心+优先队列)
http://poj.org/problem?id=3190 有n头挑剔的奶牛,只会在一个精确时间挤奶,而一头奶牛需要占用一个畜栏,并且不会和其他奶牛分享,每头奶牛都会有一个开始时间和结束时间,问至少 ...
- poj 3190 Stall Reservations 贪心 + 优先队列
题意:给定N头奶牛,每头牛有固定的时间[a,b]让农夫去挤牛奶,农夫也只能在对应区间对指定奶牛进行挤奶, 求最少要多少个奶牛棚,使得在每个棚内的奶牛的挤奶时间不冲突. 思路:1.第一个想法就是贪心,对 ...
- POJ 3190 Stall Reservations 【贪心 优先队列】
题意:给出n头牛必须单独占用一台机器的时间段,问至少需要多少台机器 先按照每头牛的时间的x来排序,然后用一个优先队列(优先选取最小的)维护已经喂好的牛的最小的结束时间 比如现在优先队列里面有m头牛已经 ...
- POJ:3190-Stall Reservations
传送门:http://poj.org/problem?id=3190 Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ--3190 Stall Reservations(贪心排序)
这里 3190 Stall Reservations 按照吃草时间排序 之后我们用 优先队列维护一个结束时间 每次比较堆顶 看是否满足 满足更新后放到里面不满足就在后面添加 #include<c ...
随机推荐
- android 多媒体数据库详解(转)
转自:http://www.2cto.com/kf/201309/242876.html 主要分为几节: 1. Android的媒体文件内部是如何存储的? 2. Andoid的媒体文件如何获取? 3. ...
- div垂直居中的几种方法
CSS教程:div垂直居中的N种方法[转](原文地址:http://www.cnblogs.com/chuncn/archive/2008/10/09/1307321.html) 在说到这个问题的时候 ...
- 如何让一个类可以被foreach枚举?
答:实现IEnumerable或其IEnumerable<T>.该接口只有一个函数 public IEnumerator GetEnumerator(); 在这里,IEnumerator也 ...
- mssql 获取自增列起始及增量
--首先创建一个表 CREATE TABLE [dbo].[abcd]( ,) NOT NULL, ) NULL, ) NULL ) ON [PRIMARY] --获取起始值 SELECT IDENT ...
- java分享第七天-03(递归打印文件目录的树状结构)
public static void main(String[] args) { File file= new File("e:/list"); printFile(file, 0 ...
- Python实战:扫描key完整性
之前在国际版本中,需要支持中英文切换功能,在如此繁多的源文件里要查找源文件里的key是语言资源包是否对应. 正好运用在之前学的python,写了个工具,支持自定义替换标签,批量处理源文件.现在看来,效 ...
- Unity_Shader(1)
Shader需要作用在Material中才能起作用. 例子1: (1)创建Shader 将shader替换为以下代码: Shader"MyDir/FirstShader" { Su ...
- 跳转到下一个activity
/* * 第一个跳转代码 */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View ...
- Java实现Oracle数据库备份
今天将很早就实现的一个Oracle数据库备份功能粘贴出来,这个功能是在大学做阶段设计时写的: import java.io.File; import java.io.IOException; /** ...
- 读书笔记:const和readonly、static readonly 那些事
C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...