HDU 5360 【优先队列+贪心】
题意:
给定N个无序区间。
对合法区间的定义是:
在这个区间之前已经选出了至少l个合法区间,最多选出了r个合法区间。则该区间为合法区间。
输出最多能挑选出多少个合法区间,并输出合法区间的数量。
思路:
先对原来给定的区间按照l从小到达排序。
然后从选了0个合法区间开始,每次在队列中加入l小于等于之前已选合法区间数的区间加入队列, 按照r从小到大进行优先排列。每次从队列中拿出top,当拿出的区间r小于已经找到的区间数时,我们把他放到临时数组里边。每次选出一个合法区间就更新一下队列的成员,将l小于等于当前合法数的都加入队列。直到无法加入并且队列为空停止循环。
最后输出的数字有三部分,包括没有加入队列的,加入队列但是r值较小变成非法区间的和按照一定次序加入队列的。
注意输出格式。
/*************************************************************************
> File Name: D.cpp
> Author: ttpond
> Created Time: 2015-8-22 16:40:42
************************************************************************/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<set>
using namespace std;
struct st
{
int l,r,id;
};
st tree[];
bool ccmp(st a,st b)
{
return a.l<b.l;
}
struct cmp
{
bool operator()(const st &a,const st &b)
{
return a.r>b.r;
}
};
int main()
{
int t,tt;
scanf("%d",&t);
for(tt=;tt<t;tt++)
{
int n;
priority_queue<st,vector<st>,cmp>q;
//priority_queue<st,vector<st>,ccmp>s;
scanf("%d",&n);
for(int i=;i<n;i++)
{
tree[i].id=i+;
}
for(int i=;i<n;i++)
{
scanf("%d",&tree[i].l);
}
for(int i=;i<n;i++)
{
scanf("%d",&tree[i].r);
}
sort(tree,tree+n,ccmp);
//for(int i=0;i<n;i++)
//{
// printf("%d %d %d\n",tree[i].l,tree[i].r,tree[i].id);
//}
// int a;
//while(1)
// scanf("%d",&a);
vector<int>tmpp;
vector<int>v;
vector<int>::iterator it;
int sst=;
int num=;
st tmp;
bool ok;
for(;num<n||(!q.empty());)
{
ok=;
while(num<n&&tree[num].l<=sst)
{
q.push(tree[num]);
num++;
ok=;
}
if((!ok)&&q.empty())
{break;}
ok=;
while(!q.empty())
{
tmp=q.top();
q.pop();
if(tmp.r>=sst)
{
sst++;
v.push_back(tmp.id);
ok=;
break;
}
tmpp.push_back(tmp.id);
}
if(!ok)
{break;}
}
ok=;
printf("%d\n",v.size());
for(it=v.begin();it!=v.end();it++)
{
if(it!=v.begin())
printf(" %d",*it);
else
{
ok=;
printf("%d",*it);
}
}
int ttt=;
for(;num<n;num++)
{
if((!ok)&&ttt==)
{
ok=;
printf("%d",tree[num].id);
ttt++;
}
else
{
printf(" %d",tree[num].id);
}
}
//int a;
//while(1)
//{
// scanf("%d",&a);
//}
for(it=tmpp.begin();it!=tmpp.end();it++)
{
if((!ok)&&it==tmpp.begin())
{
printf("%d",*it);
}
else
{
printf(" %d",*it);
}
}
printf("\n");
}
}
HDU 5360 【优先队列+贪心】的更多相关文章
- 2015多校第6场 HDU 5360 Hiking 贪心,优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...
- HDU 5360 (贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:告诉你n个区间[ l[i],r[i] ],然后让你排序,必须左区间不大于它前边的总区间个数 ...
- hdu 4544 优先队列+贪心
题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏.游戏规则很简单,用箭杀死免子即可.箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di ...
- HDU 5360 Hiking (贪心)
题意:邀请 n 参加聚会,如果在邀请第 i 个人之前,已经成功邀请了 x 个人,并且 li <= x <= ri,那么第 i 人才会去,问你怎么排列使得邀请的人最多. 析:对于所有的人,按 ...
- 最高的奖励 - 优先队列&贪心 / 并查集
题目地址:http://www.51cpc.com/web/problem.php?id=1587 Summarize: 优先队列&贪心: 1. 按价值最高排序,价值相同则按完成时间越晚为先: ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- POJ2431 优先队列+贪心 - biaobiao88
以下代码可对结构体数组中的元素进行排序,也差不多算是一个小小的模板了吧 #include<iostream> #include<algorithm> using namespa ...
- hdu3438 Buy and Resell(优先队列+贪心)
Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- hdu 5360 Hiking(优先队列+贪心)
题目:http://acm.hdu.edu.cn/showproblem.php? pid=5360 题意:beta有n个朋友,beta要邀请他的朋友go hiking,已知每一个朋友的理想人数[L, ...
随机推荐
- LNMP笔记:解决mail函数不能发送邮件
用LNMP环境,在探针里测试发送邮件,失败了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安 ...
- 【转载】SQL Server 2012 日志传送
SQL Server 2012 日志传送 一.准备: 数据库为完全恢复模式,并事先做一次完全备份. 共享一个文件夹,主机备份放在这个文件夹,而且客户机有权访问这个共享文件夹. 二.基本配置 1.启动配 ...
- 【Android】ListView中EditText焦点问题
一.描述: 近期一个项目中需要开发一种类似表格的界面来显示和配置参数,Android并无直接类似表格的控件支持,我采用了ListView中布局EditText和TextView来实现,其中TextVi ...
- 日常:论我的T3是如何苟掉的
说起来都是泪啊 T3的bfs一直不对,我想死. 考试时候苟了两个小时,死活找不到错误(因为lca和离散化都码出来了,太乱) 最后把bfs单独提出来,发现在bfs里面输出的f[ly][0]都是正确的,到 ...
- RTSP详解
关于 RTSP. RTSP协议是一个非常类似HTTP协议的流控制协议.它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似.Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协 ...
- 条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to pass-by-value)
NOTE: 1.尽量以pass-by-reference-to-const 替换pass-by-value.前者通常比较高效,并可避免切割问题(slicing problem). 2.以上规则并不适用 ...
- LeetCode(65) Valid Number
题目 Validate if a given string is numeric. Some examples: "0" => true " 0.1 " ...
- 如何在开发时用PC端对移动端页面进行调试
原文转载于:https://cnodejs.org/topic/56ebdf2db705742136388f71 项目名称: spy-debugger 项目地址:https://github.com/ ...
- Spring☞WebApplicationContext的继承关系
spring mvc里的root/child WebApplicationContext的继承关系 在传统的spring mvc程序里会有两个WebApplicationContext,一个是pare ...
- oracle中的权限管理
connect resource权限 grant connect,resource to user; 执行上面的sql语句后用户包括的权限: CONNECT角色: --是授予最终用户的典型权利,最基本 ...