博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing:111. 畜栏预定(贪心 + 小根堆)
阅读量:5087 次
发布时间:2019-06-13

本文共 1703 字,大约阅读时间需要 5 分钟。

有N头牛在畜栏中吃草。

每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏。

给定N头牛和每头牛开始吃草的时间A以及结束吃草的时间B,每头牛在[A,B]这一时间段内都会一直吃草。

当两头牛的吃草区间存在交集时(包括端点),这两头牛不能被安排在同一个畜栏吃草。

求需要的最小畜栏数目和每头牛对应的畜栏方案。

输入格式

第1行:输入一个整数N。

第2..N+1行:第i+1行输入第i头牛的开始吃草时间A以及结束吃草时间B,数之间用空格隔开。

输出格式

第1行:输入一个整数,代表所需最小畜栏数。

第2..N+1行:第i+1行输入第i头牛被安排到的畜栏编号,编号从1开始,只要方案合法即可。

数据范围

1N500001≤N≤50000,

1A,B10000001≤A,B≤1000000

输入样例:

51 102 43 65 84 7

输出样例:

412324

 

算法:贪心 + 小根堆

题解:建立一个小根堆,把结束时间最早的畜栏放再堆顶,然后判断下一头牛的开始时间是否比堆顶的那个结束时间小,如果小的话,就可以接着用那个畜栏,否则新建一个畜栏。

 

#include 
#include
#include
#include
using namespace std;const int maxn = 5e5+7;struct node { int start, end, id; friend bool operator <(node a, node b) { //重载运算符 if(a.end == b.end) { return a.start > b.start; } return a.end > b.end; };}arr[maxn];priority_queue
q; //建立最小堆bool cmp(node a, node b) { if(a.start == b.start) { return a.end < b.end; } return a.start < b.start;}int main() { int n; scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d %d", &arr[i].start, &arr[i].end); arr[i].id = i; } sort(arr + 1, arr + n + 1, cmp); int cnt = 0; int ans[maxn]; for(int i = 1; i <= n; i++) { if(!q.empty() && q.top().end < arr[i].start) { ans[arr[i].id] = ans[q.top().id]; //使用前面那个畜栏 q.pop(); } else { cnt++; ans[arr[i].id] = cnt; //使用新的畜栏 } q.push(arr[i]); } cout << cnt << endl; for(int i = 1; i <= n; i++) { cout << ans[i] << endl; } return 0; }

 

转载于:https://www.cnblogs.com/buhuiflydepig/p/11298350.html

你可能感兴趣的文章
POJ 2069 Super Star(计算几何の最小球包含+模拟退火)
查看>>
jdk工具keytool和jarsigner帮助Part2(jdk keytool&jarsigner tool manual)
查看>>
联想ThinkPad S3-S440虚拟机安装,ubuntu安装,Hadoop(2.7.1)详解及WordCount运行,spark集群搭建...
查看>>
Web前端面试题集锦
查看>>
Android 通过AIDL在两个APP之间Service通信
查看>>
关于笔试题输入输出的小问题
查看>>
微信公众平台开发(三)——二维码、创建菜单
查看>>
Spring框架基础解析
查看>>
Ruby入门——简介&基本概述
查看>>
MySql (二)入门语句和基本操作
查看>>
(*p)++和*(p++)和*p++的区别
查看>>
128. Longest Consecutive Sequence(leetcode)
查看>>
四边形不等式
查看>>
被swoole坑哭的PHP程序员
查看>>
jQuery对ajax的支持
查看>>
转 十大OpenGL教程
查看>>
iOS推送 (百度推送)
查看>>
<html>
查看>>
三种东西永远不要放到数据库里
查看>>
Struts访问web元素方法之---最常用的Ioc控制反转,依赖注入
查看>>