题目:http://acm.hdu.edu.cn/showproblem.php?

pid=5360

题意:beta有n个朋友,beta要邀请他的朋友go hiking,已知每一个朋友的理想人数[L,R](现有L~R个人准备去,那么这个朋友就去)。

求最多有多少人去。

及beta邀请朋友的顺序。

分析:每次邀请人的最优解就是:选会去的人里面R最小的那个人。

代码实现的话,cur代表已经准备go hiking的人数,每次将全部L<=cur的人放进优先队列,选出R最小的那个。

假设队列为空,那么剩下的全部人将不会去,假设先出的那个人的[L,R]不满足条件,那么这个人以后也不会去go
hiking,所以还是将他选出,仅仅是去go hiking的人数不增。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 1e5+5;
struct node
{
int L,R,id;
bool operator < (const node &t) const
{
return R>t.R;
}
}s[maxn];
bool cmp(node a,node b)
{
if(a.L!=b.L)
return a.L<b.L;
return a.R<b.R;
}
int ans[maxn];
priority_queue <node > q;
int main()
{
int ncase,n,i,j,cur,cnt;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&s[i].L);
for(i=1;i<=n;i++)
{
scanf("%d",&s[i].R);
s[i].id=i;
}
sort(s+1,s+1+n,cmp);
cur=0;
cnt=1;
i=1;
while(!q.empty())
q.pop();
while(1)
{
while(i<=n && s[i].L<=cur)
q.push(s[i++]);
if(q.empty())
break;
node temp=q.top();
q.pop();
if(temp.L<=cur && temp.R>=cur)
cur++;
ans[cnt++]=temp.id;
}
for(;i<=n;i++)
ans[cnt++]=s[i].id;
printf("%d\n",cur);
printf("%d",ans[1]);
for(i=2;i<=n;i++)
printf(" %d",ans[i]);
printf("\n");
}
return 0;
}

hdu 5360 Hiking(优先队列+贪心)的更多相关文章

  1. HDU 5360——Hiking——————【贪心+优先队列】

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  2. HDOJ 5360 Hiking 优先队列+贪心

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意: 大概的意思就是每个人有个人数接受范围$[l_i,r_i]$,现在你每次能从还未被选取的人 ...

  3. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  4. HDU 5360 【优先队列+贪心】

    题意: 给定N个无序区间. 对合法区间的定义是: 在这个区间之前已经选出了至少l个合法区间,最多选出了r个合法区间.则该区间为合法区间. 输出最多能挑选出多少个合法区间,并输出合法区间的数量. 思路: ...

  5. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  6. HDU 5360 Hiking 登山 (优先队列,排序)

    题意: 有n个人可供邀请去hiking,但是他们很有个性,每个人都有个预期的人数上下限[Li,Ri],只有当前确定会去的人数在这个区间内他才肯去.一旦他答应了,无论人数怎样变更,他都不会反悔.问最多能 ...

  7. HDU 5360 Hiking (贪心)

    题意:邀请 n 参加聚会,如果在邀请第 i 个人之前,已经成功邀请了 x 个人,并且 li <= x <= ri,那么第 i 人才会去,问你怎么排列使得邀请的人最多. 析:对于所有的人,按 ...

  8. HDU 5360 Hiking(优先队列)

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  9. 2015 Multi-University Training Contest 6 hdu 5360 Hiking

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

随机推荐

  1. python 带颜色样式打印到终端

    #!/usr/bin/python # -*- coding: utf-8 -*- """ Created on Tue Aug 8 17:01:54 2017 @aut ...

  2. selenium 问题:加了显性等待后,操作元素依然出错

    背景: 用WebDriverWait时,一开始用的是presence_of_element_located,我对它的想法就是他就是用来等待元素出现.结果屡屡出问题.元素默认是隐藏的,导致等待过早的就结 ...

  3. Andorid上拉加载更多的几种实现方式

    1.前言 Andriod中上拉加载更多的效果随处可见,因为一次性要展现的数据太多信息量太大的话,给用户的体验就很差(加载慢,界面卡顿.流量消耗大等),而加载更多可以控制每次加载条目的数量以达到快速加载 ...

  4. AngularJS路由设置方法

    Module.config(['$routeProvider', function($routeProvider) { $routeProvider .when('/mall-home', { tem ...

  5. 关于bitmap recycle trying to use a recycled bitmap android.graphics.Bitmap

    在开发中,一直使用4.0以上手机作为測试机所以一直没有出现这个问题,今天换了2.3版本号的手机.出现了这个错误: trying to use a recycled bitmap android.gra ...

  6. CentOS修复grub

    grub启动项损坏无法进入系统. 进入grub模式(可借助安排盘rescue后在shell中输入grub). 一:     通过下面三个命令中的一个.找到正确的grub位置.     1. find ...

  7. Backbone.js 1.0.0源码架构分析(一)

    Backbone.js 是javascript 语言中 首个实现MVC设计模式的类库,API接口方法重度依赖于underscore.js,DOM选择器则依赖于jQuery.js或者zepto.js. ...

  8. 插入排序(PHP,C)

    PHP<?php /* ** 功能:插入算法 ** 描述: ** 作者:yuwensong */ function insertSorting($arr,$n){ for($i = 1; $i& ...

  9. 补知识:EntityFramework Core映射关系详解

    前言 本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关系) 首先我们从最简单的一对多关系说起,我们给 ...

  10. C#面试题汇总2

    http://www.cnblogs.com/wangjisi/archive/2010/06/14/1758347.html 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及 ...