poj3190
一、题意:有n头牛,每头牛需要占用一个时间段的时间来挤奶,且必须有机器。问最少需要多少个机器
二、思路:区间贪心。把尽量多的牛放在一个棚子里,这样就可以使得用到的棚子数最少。只要任意两头牛的挤奶时间不重合,就可以放在一个棚子里。因为N值比较大,先标记好每一头牛的起始坐标,然后按起始时间从小到大进行排序,然后依次从前往后去遍历每一头牛。这里需要用一个优先队列来维护,以结束时间从小到大来维护,每次将一头牛与队列首的牛进行比较,如果满足它的起始时间大于队列首的那头牛的结束时间,这两头牛就可以使用同一个机器,否则就新加一个机器。这里需要注意牛的入队和出队
三、代码
#include"iostream"
#include"stdio.h"
#include"queue"
#include"algorithm"
using namespace std;
const int MAXN=50005; struct Node
{
int s,e,pos;
friend bool operator<(Node a,Node b)
{
if(a.e==b.e) return a.s<b.s;
return a.e>b.e;
}
}; bool Cmp(Node a,Node b)
{
if(a.s!=b.s)
return a.s<b.s;
else
return a.e<b.e;
} Node cows[MAXN];
priority_queue<Node>que;
int order[MAXN];
int main()
{
int n;
while(scanf("%d",&n)==1)
{
for(int i=0;i<n;i++)
{
scanf("%d%d",&cows[i].s,&cows[i].e);
cows[i].pos=i;
}
sort(cows,cows+n,Cmp);
que.push(cows[0]);
order[cows[0].pos]=1;
for(int i=1;i<n;i++)
{
if(cows[i].s>que.top().e)
{
order[cows[i].pos]=order[que.top().pos];
que.pop();
que.push(cows[i]);
}
else
{
que.push(cows[i]);
order[cows[i].pos]=que.size();
}
}
cout<<que.size()<<endl;
for(int i=0;i<n;i++)
{
cout<<order[i]<<endl;
}
}
return 0;
}
poj3190的更多相关文章
- poj3190 Stall Reservations(贪心+STL)
https://vjudge.net/problem/POJ-3190 cin和scanf差这么多么..tle和300ms 思路:先对结构体x升序y升序,再对优先队列重载<,按y升序. 然后依次 ...
- 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190
POJ2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14585 Accepte ...
- POJ-3190 Stall Reservations---优先队列+贪心
题目链接: https://vjudge.net/problem/POJ-3190 题目大意: 有N头奶牛,每头奶牛都会在[1,1000000]的时间区间内的子区间进行挤奶.挤奶的时候奶牛一定要单独放 ...
- POJ3190 - 优先队列 贪心
POJ3190 将所有牛从小到大排序然后用优先队列(小根堆)依次记录插入的牛的结束时间,如果插入牛时起始时间大于首元素,ans不增加并弹出首元素. 挺简单的.那么为什么我会写(水)这篇博客呢? #in ...
- poj3190 stall revertation
Stall Re ...
- POJ3190 Stall Reservations 【贪婪】
Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3106 Accepted: 111 ...
- poj3190区间类贪心+优先队列
题意:每个奶牛产奶的时间为A到B,每个奶牛产奶时要占用一间房子,问n头奶牛产奶共需要多少房子,并输出每头奶牛用哪间房子 分析:这题就是一个裸的贪心,将奶牛按开始时间进行排序即可,但考虑一下数据范围,我 ...
- POJ--3190 Stall Reservations(贪心排序)
这里 3190 Stall Reservations 按照吃草时间排序 之后我们用 优先队列维护一个结束时间 每次比较堆顶 看是否满足 满足更新后放到里面不满足就在后面添加 #include<c ...
- poj3190 Stall Reservations
我一开始想用线段树,但是发现还要记录每头cow所在的棚...... 无奈之下选择正解:贪心. 用priority_queue来维护所有牛棚中结束时间最早的那个牛棚,即可得出答案. 注意代码实现的细节. ...
- poj3190 Stall Reservations (贪心+优先队列)
Cleaning Shifts Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) To ...
随机推荐
- 5.python之pip安装模块失败
本文是篇水文,主要是在学习python过程中总是遇到使用pip安装一些模块失败,记录一下安装模块解决办法 第一种方法: 首先安装wheel模块: pip install wheel 如果wheel都安 ...
- JavaScript跨域调用基于JSON的RESTful API
1. 基本术语 AJAX(Asynchronous JavaScript And XML,异步JavaScript和XML):AJAX是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交 ...
- CSS 中的 px、em、rem 和 vh
区分 px:Pixel.像素. em:相对长度单位.继承父级元素的 font-size,值是相对于父级元素font-size的倍数. rem:Root em.相对于根元素(即 <html> ...
- APP压力稳定性测试
转自:https://www.cnblogs.com/nuonuozhou/p/8643735.html 1.android系统自带monkey程序,模拟用户触摸屏幕,滑动track ball,按键等 ...
- 【转】MOCK方法介绍
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://baidutech.blog.51cto.com/4114344/743740 1 ...
- markdown syntax
Markdown 语法 转载自https://zh.mweb.im/markdown.html 首先应该了解的 每一个 Markdwon 使用者都应该了解的,是 Markdown 最基本的版本,也就是 ...
- python-webdriver库之Keys
在使用webdriver时,有些时候我们需要做一些键盘上特殊键的操作,例如backspace,ctrl,shift等,这个时候就需要用到webdriver.common.keys.Keys方法来进行 ...
- 用HTML,css完成的百叶窗效果,新手必看
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title> ...
- BZOJ2668:[CQOI2012]交换棋子(费用流)
题目描述 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. 输入输出格式 输入格式: 第一行 ...
- mac下对NTFS格式的磁盘进行读写操作
mac对NTFS格式的分区读写有很大的限制,网上看到很多相关的文章,都表明了一个信息:需要购买类似NTFS for mac这样的软件才能实现对NTFS格式的分区读写的权限,其实不然,mac自带的hdi ...