题目传送门

题意:一人过生日,很多人排着队送礼物。排队顺序是礼物价值大的优先,如果相等先来的优先。有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;
}

  

优先队列 HDOJ 5437 Alisha's Party的更多相关文章

  1. HDU 5437 Alisha’s Party (优先队列)——2015 ACM/ICPC Asia Regional Changchun Online

    Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her f ...

  2. hdu 5437 Alisha’s Party 优先队列

    Alisha’s Party Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_sh ...

  3. 优先队列 + 模拟 - HDU 5437 Alisha’s Party

    Alisha’s Party Problem's Link Mean: Alisha过生日,有k个朋友来参加聚会,由于空间有限,Alisha每次开门只能让p个人进来,而且带的礼物价值越高就越先进入. ...

  4. hdu 5437 Alisha’s Party 模拟 优先队列

    Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her f ...

  5. HDU 5437 Alisha’s Party (优先队列模拟)

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

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

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

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

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

  8. HDU 5437 Alisha’s Party

    题意:有k个人带着价值vi的礼物来,开m次门,每次在有t个人来的时候开门放进来p个人,所有人都来了之后再开一次门把剩下的人都放进来,每次带礼物价值高的人先进,价值相同先来先进,q次询问,询问第n个进来 ...

  9. 15年-ICPC长春-网络赛

    ID name status one word  POJ 5437 Alisha’s Party 赛后AC. 优先队列,模拟.对时间t排序 POJ 5438 Ponds 赛后AC 循环链表 POJ 5 ...

随机推荐

  1. Appium,IOS 模拟器,Java工程搭建

    首先进入sample code Test App 有TestApp.xcodeproj文件的工程目录下 下编译出TestApp.app文件 1.新建 java 工程 2.import需要的包 新建cl ...

  2. Appium基于安卓的各种FindElement的控件定位

    转自:http://www.2cto.com/kf/201410/340345.html 1. findElementByName 1.1 示例 ? 1 2 el = driver.findEleme ...

  3. 小程序登录方式切换 不做url跳转

    var filegUP = require('../../utils/getUserPassword.js'); var filemd5 = require('../../utils/md5.min. ...

  4. HDU3507 Print Article —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3507 Print Article Time Limit: 9000/3000 MS (Java/Others)    Mem ...

  5. html5--6-35 列表和表格

    html5--6-35 列表和表格 实例 学习要点 掌握列表和表格的样式设置 表格有关的属性: border-collapse 设置是否把表格边框合并为单一的边框.属性值:separate 默认值/c ...

  6. LA-3905 (扫描线)

    题意: 给一些流星的初始位置和运动向量,给了相机的拍摄范围;问你最多能拍到多少颗流星; 思路: 将流星用出现在相机拍摄范围内的时间段表示;sort后在扫面端点更新最大值; Ac代码: #include ...

  7. phpMVC框架的核心启动类定义

    <?php//核心启动类class Framework { //定义一个run方法 public static function run(){ // echo "hello,wrold ...

  8. [AHOI 2006] 上学路线

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1266 [算法] 首先 , 用Dijkstra求单源最短路 然后 , 建出这张图G的最 ...

  9. GYM 100741A Queries

    传送门 题目大意: 一个长度为n的序列,q次三种操作 +p  r:下标为p的数+r -p r:下标为p的数-r s l r mod [L,R]中有多少数%m=mod,m已经给出 题解: 开十个树状数组 ...

  10. Babel转码器

    Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行.这意味着,你可以用ES6的方法 编写程序,又不用担心现在环境是否支持.