题目传送门

题意:一人过生日,很多人排着队送礼物。排队顺序是礼物价值大的优先,如果相等先来的优先。有m次开门,当t个人到了会开门让p个人进门。最后一次让门外的所有人按顺序进门。有q次询问,问第x个进门的人的名字。

分析:很明显的优先队列,首先交给队友做,结果写的搓,无限RE。没办法只能我上,因为要对字符串处理我用了string,思路正确,各种坑都解决了但是很快WA了,我的内心是奔溃的。赛后发现是cin,cout和scanf,printf冲突了 (ios::sync_with_stdio (false);关闭同步)

,以前听说过这个问题,这次终于碰上了!解题思路是先排好序,t也是要排序的,而且有相同的t,没到t个人来,那么入队t个人,注意队列中不一定有p个人,及时break,详细见代码。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;const int N = 150000 + 10;
const int INF = 0x3f3f3f3f;
struct People    {string name;int v, id;People () {}People (string n, int v, int id) : name (n), v (v), id (id) {}bool operator < (const People &r) const {if (v == r.v)    return id > r.id;else    return v < r.v;}
}p[N], ans[N];
struct Op    {int t, p;bool operator < (const Op &r) const {if (t == r.t)    return p < r.p;else return t < r.t;}
}a[N];int main(void)    {ios::sync_with_stdio (false);        //用了这句话,puts都不能用了int T;    cin >> T;while (T--)    {int n, m, q;    cin >> n >> m >> q;for (int i=1; i<=n; ++i)    {cin >> p[i].name >> p[i].v;    p[i].id = i;}for (int i=1; i<=m; ++i)    {cin >> a[i].t >> a[i].p;}sort (a+1, a+1+m);int tot = 0;priority_queue<People> Q;int n1 = 0, n2 = 1;while (!Q.empty () || n1 <= n)    {while (n2 <= m && n1 == a[n2].t)    {for (int i=1; i<=a[n2].p; ++i)    {if (Q.empty ())    break;ans[++tot].name = Q.top ().name;    Q.pop ();}n2++;}n1++;if (n1 > n)    break;Q.push (People (p[n1].name, p[n1].v, p[n1].id));}while (!Q.empty ())    {ans[++tot].name = Q.top ().name;    Q.pop ();}for (int x, i=1; i<=q; ++i)    {cin >> x;cout << ans[x].name;if (i == q)    cout << endl;else    cout << " ";}}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4806322.html

优先队列 HDOJ 5437 Alisha's Party相关推荐

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

    题目传送门 1 /* 2 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 3 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小, ...

  2. HDU OJ 5437 Alisha’s Party 2015online A

    题目:click here 题意: 邀请k个朋友,每个朋友带有礼物价值不一,m次开门,每次开门让一定人数p(如果门外人数少于p,全都进去)进来,当最后所有人都到了还会再开一次门,让还没进来的人进来,每 ...

  3. python相机标定流程图_相机标定——OpenCV-Python Tutorials

    目标 我们将了解导致相机失真.扭曲的内因与外因 我们将试着找到这些畸变参数,并消除畸变 基础 如今大量廉价的摄像机导致了很多照片畸变.两个主要的畸变是径向畸变和切向畸变. 由于径向畸变,直线会变弯.距 ...

  4. hdoj 1434 幸福列车 【优先队列】

    幸福列车 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Su ...

  5. HDU 5437by cyl优先队列

    HDU 5437 题意: ​ 有个人要过生日,有k个朋友来拜访,但是他家里实在是有点小,只能依次让朋友进门,有m个特定的时间,每次可以进入p个人,每一个朋友来会带礼物,价值为v.主人还是比较贪心的,他 ...

  6. 大一寒假培训(七)——队列与优先队列

    文章目录 队列的定义 队列的基本操作 周末舞会 取纸牌游戏 海港(NOIP2016普及组真题) Blash数集-队列-set 优先队列 优先队列的定义 优先队列的定义方法 用结构体定义优先队列(重载函 ...

  7. python 优先队列_python实现最大优先队列 python优先级队列如何最大值优先

    python优先级队列如何最大值优先 啥???????队列默认就有优先级即使告别爱情的时候,也希望你一切都好;小编不再爱你的时候,也许不是小编不爱你,只是,小编已不能再爱你. python3 优先队列 ...

  8. 优先队列的应用 C++实现

    优先队列的应用 C++实现 优先队列可以用堆来实现, 堆底层可以用数组表示, 通过索引关系,可以表示成一颗二叉完全树 C++的STL提供了相应的容器适配器 包含在queue头文件中 下面通过一道题来看 ...

  9. ccf 交通规划(迪杰斯特拉优先队列模板)

    什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ...

最新文章

  1. 安装oracle11的时候 提示ORA-28056 未能将审计记录写入windows事件日志,这是怎么回事啊
  2. Visual Studio 2017强制更新方法
  3. linux 测试vim编译器_推荐几个好用的在线编译器
  4. 时间控件_Selenium时间控件的处理
  5. 数据挖掘之随机事件与随机变量
  6. 如何用python中的turtle库画三角形_Python如何使用turtle库绘制图形
  7. SpringCloud学习笔记012---SpringBoot启动时Caused by: java.lang.NoClassDefFoundError:
  8. NioEventLoopGroup 源码分析
  9. maven仓库中的LastUpdated文件删除脚本
  10. java zip_Java压缩技术(二) ZIP压缩——Java原生实现
  11. 浅谈Java内存模型——JVM
  12. html5 人物画像,人物头像画不准?掌握这五步,让你把人物头像画准,画像
  13. 冰桶挑战,正在朝功利化和畸形化方向“扩散”
  14. 杀毒软件 McAfee 创始人自杀,75 年传奇人生画下句号
  15. html制作网站 知乎,做短视频运营看那些网站(推荐这些短视频素材网站)
  16. 业务中台和数据中台的区别
  17. 监控摄像头上滤光片的作用是什么
  18. R语言学习笔记 ②求一组数据的平均数、中位数、标准差和范围
  19. 有哪些广告联盟值得推荐?
  20. Linux内核源码分析《进程管理》

热门文章

  1. 弗拉明戈舞_百度百科
  2. Android Intent And Intent Filter
  3. 实时OLAP分析利器Druid介绍
  4. 一份针对于新手的多线程实践--进阶篇
  5. Linux目录结构介绍
  6. 转:WEB前端性能优化规则
  7. Oracle SQL语句收集
  8. GPS坐标转换 百度地图API调用
  9. C#编程-Access数据库的简单应用
  10. EXT.NET复杂布局(四)——系统首页设计(下)