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, ...
随机推荐
- resharper10 注册方法
注册工具:http://pan.baidu.com/s/1bnFjGfX 注册方法: 1 编辑Products.json文件,留下自己要注册的产品路径即可. 2 运行patch.exe 3 使用Ser ...
- Django创建第一个应用
一.创建第一个应用,并在settings.py中添加. python manage.py startapp article 二.创建第一个模型 class Article(models.Model): ...
- EasyX库进行图片绘制函数
引用函数:loadimage参数: // 从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)void loadimage( IMAGE* pDstImg, // 保存图像的 IMAG ...
- mybatis中app的查询语句
SELECT * FROM ( SELECT (@rownum := @rownum + ) AS rownum,c.* FROM (SELECT @rownum := ) r, ( select * ...
- ajax请求的时候get 和post方式的区别
ajax请求的时候get 和post方式的区别?一个在url后面一个放在虚拟载体里面有大小限制安全问题应用不同一个是论坛等只需要请求的,一个是类似修改密码的
- 初见Vue
一.What 官方定义:是一套用于构建用户界面的渐进式框架.这,what?不明觉厉,我反正现在还是不知道,在这之前,就只知道Vue.js是用来渲染数据的,其实它的核心库只关注视图层.不多说,用多了就知 ...
- windows cmd 模仿电影黑客
1.win+R 2.输入cmd 3.按F11进入全屏 4.color a 改变颜色为绿色(可能看起来秀一点) 5.dir/s 查看所有文件,就跑起来了,看起来很酷,但是在懂得人眼里,没什么的(所以只能 ...
- C指针复制字符串从一个数组到另一个数组
#include <stdio.h> void copyString (char *to, char *from) { while ( *from ) // from指针遇 ...
- linux tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
解决方法: 1.先找出java安装路径 $ which java /data/apps/java/jdk1.8.0_91/bin/java 2.在catalina.sh中加入配置 JAVA_HOME= ...
- (1) LVS基本概念和三种模式
网站架构中,负载均衡技术是实现网站架构伸缩性的主要手段之一. 所谓"伸缩性",是指可以不断向集群中添加新的服务器来提升性能.缓解不断增加的并发用户访问压力.通俗地讲,就是一头牛拉不 ...