Contest 6 1008 Hiking【贪心+优先队列】
2015-08-07 19:51
381 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360
几乎四个小时调这一个题,终场前十分钟整出个优先队列的A了真是够拼,看着最后半分钟的提交记录简直是玩心跳TAT
换了各种思路各种T。。最后不得不承认STL还是很强大的TAT
言归正传。。
先按开始人数为第一关键字结束人数为第二关键字升序排。
然后每次发邀请时将当前满足条件的(从看开始人数的区间就能找到,而如果结束人数相对来讲已经超了则不会再有可能接受邀请了)加入优先队列,优先队列的排列规则是按结束人数升序的。这样优先序列会自动排序,我们只要取出优先队列的第一项即可。
几乎四个小时调这一个题,终场前十分钟整出个优先队列的A了真是够拼,看着最后半分钟的提交记录简直是玩心跳TAT
换了各种思路各种T。。最后不得不承认STL还是很强大的TAT
言归正传。。
先按开始人数为第一关键字结束人数为第二关键字升序排。
然后每次发邀请时将当前满足条件的(从看开始人数的区间就能找到,而如果结束人数相对来讲已经超了则不会再有可能接受邀请了)加入优先队列,优先队列的排列规则是按结束人数升序的。这样优先序列会自动排序,我们只要取出优先队列的第一项即可。
#include<iostream> #include<cstring> #include<queue> #include<cstdio> #include<algorithm> using namespace std; const int MAXL=100005; int n,cnt; struct node{ int l,r,id; bool operator <(const node &b)const{ return r>b.r; } }p[MAXL]; priority_queue <node> que; int d[MAXL]; bool cmp(node a,node b) { return (a.l<b.l)||(a.l==b.l&&a.r<b.r); } int main() { int i,j,t; //-------------------------------------------------------------------------------------------- scanf("%d",&t); while (t--) { scanf("%d",&n); for (i=1;i<=n;i++) scanf("%d",&p[i].l); for (i=1;i<=n;i++){ scanf("%d",&p[i].r); p[i].id=i; } sort(p+1,p+n+1,cmp); //------------------------------------------------------------------------------------ memset(d,0,sizeof d); int sum=0; cnt=0; while (!que.empty()) que.pop(); i=1; while (1){ while (i<=n&&p[i].l==sum) { que.push(p[i]); i++; } if (que.empty()){ for (j=i;j<=n;j++) d[++cnt]=p[j].id; break; } while (!que.empty()&&que.top().r<sum){ node tmp=que.top(); que.pop(); d[++cnt]=tmp.id; } if (que.empty()){ for (j=i;j<=n;j++) d[++cnt]=p[j].id; break; } node tmp=que.top(); if (tmp.l<=sum&&tmp.r>=sum){ que.pop(); sum++; d[++cnt]=tmp.id; } } int j=sum; while (!que.empty()){ d[++cnt]=que.top().id; que.pop(); } printf("%d\n",sum); printf("%d",d[1]); for (int k=2;k<=cnt;k++) printf(" %d",d[k]); printf("\n"); } return 0; }
相关文章推荐
- jQuery 学习笔记二
- 由“stay hungry,stay foolish”所引发出的内心激荡
- Oracle经典查询练手第二篇
- iOS UItextView针对删除表情特殊字符串处理
- Ubuntu 14.10 下开机不进入图形化界面
- nodejs配置与入门
- 2015届华为校园招聘机试题 (java实现)
- [暴力搜索] poj 3187 Backward Digit Sums
- 机房收费系统—注册 实时错误“-2147217873(80040e2f)”
- Codeforces Round #274 (Div. 2)E. Riding in a Lift
- UVA-1068 Sum-1-N之间所有数的和
- 使用Material Design 应用主题
- POJ 2000 Gold Coins 简单模拟
- POJ-3299 Humidex-湿度温度露点
- DOM文档对象的简单介绍
- 使用Material Design 应用主题
- Eclipse工具条中添加下拉按钮
- 使用MySQL Workbench远程管理工具进行远程管理Mysql的错误及解决办法
- Atom飞行手册翻译: 4.4 Atom中的序列化
- 使用MySQL Workbench远程管理工具进行远程管理Mysql的错误及解决办法