题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5437

题意:公主有k个朋友来参加她的生日party,每个人都会带价值为v[i]的礼物过来,在所有人到齐之前公主会打开大门m次,每次开门就是在第t个人到来之后,然后让p个人进入大厅,如果当前人数不足p人,则让所有人都进去,最后在所有人都来到门口时,再次打开门,让剩下所有的人都进入大厅;当然选择礼物价值大的先进入,如果两个人的礼物价值相等,则先来的先进,现在有q个问题,问第ni个进入大厅的人是谁;

我们可以用优先队列存入每次开门可以进去的人,然后按顺序依次进入p个人,模拟,注意细节即可;

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <string>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <map>
  8. #include <queue>
  9. #include <stack>
  10. #include <math.h>
  11.  
  12. using namespace std;
  13.  
  14. #define met(a, b) memset(a, b, sizeof(a))
  15. #define N 150003
  16. #define INF 0x3f3f3f3f
  17.  
  18. typedef long long LL;
  19.  
  20. struct node
  21. {
  22. int Time, v;
  23. char Name[];
  24. friend bool operator < (node p, node q)
  25. {
  26. if(p.v != q.v)
  27. return p.v < q.v;
  28. return p.Time > q.Time;
  29. }
  30. }a[N];
  31.  
  32. struct Open
  33. {
  34. int t, cnt;
  35. bool friend operator < (Open p, Open q)
  36. {
  37. return p.t < q.t;
  38. }
  39. }b[N];
  40.  
  41. int n, m, q;
  42.  
  43. char ans[N][];
  44.  
  45. void solve()
  46. {
  47. priority_queue<node> Q;///优先队列注意优先级;
  48.  
  49. node p;
  50.  
  51. int j = , k = ;
  52.  
  53. for(int i=; i<=m; i++)
  54. {
  55. while(j <= b[i].t && j<=n)///把此次开门能进去的先放入队列;
  56. {
  57. Q.push(a[j]);
  58. j++;
  59. }
  60. int num = b[i].cnt;
  61.  
  62. while(!Q.empty() && num --)///每次进num个人,如果不足num就是全进入,进入大厅,即出队列;
  63. {
  64. p = Q.top();
  65. Q.pop();
  66. strcpy(ans[k++], p.Name);
  67. }
  68. }
  69. while(j<=n)///把剩下没有进入队列的放入队列;
  70. {
  71. Q.push(a[j]);
  72. j++;
  73. }
  74. while(!Q.empty())///当所有人都到了之后,再次打开门,让所有人都进去;
  75. {
  76. p = Q.top();
  77. Q.pop();
  78. strcpy(ans[k++], p.Name);
  79. }
  80. }
  81.  
  82. int main()
  83. {
  84. int T;
  85.  
  86. scanf("%d", &T);
  87.  
  88. while(T--)
  89. {
  90. scanf("%d %d %d", &n, &m, &q);
  91. for(int i=; i<=n; i++)
  92. {
  93. scanf("%s %d", a[i].Name, &a[i].v);
  94. a[i].Time = i;
  95. }
  96.  
  97. for(int i=; i<=m; i++)
  98. scanf("%d %d", &b[i].t, &b[i].cnt);
  99.  
  100. sort(b+, b+m+);
  101.  
  102. solve();
  103.  
  104. for(int i=; i<=q; i++)
  105. {
  106. int x;
  107. scanf("%d", &x);
  108. printf("%s%c", ans[x], i==q?'\n':' ');
  109. }
  110. }
  111. return ;
  112. }

Alisha’s Party---hdu5437(模拟+优先队列)的更多相关文章

  1. hdu6136[模拟+优先队列] 2017多校8

    有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long ...

  2. Alisha’s Party (HDU5437)优先队列+模拟

    Alisha 举办聚会,会在一定朋友到达时打开门,并允许相应数量的朋友进入,带的礼物价值大的先进,最后一个人到达之后放外面的所有人进来.用优先队列模拟即可.需要定义朋友结构体,存储每个人的到达顺序以及 ...

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

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

  4. HDU 1103 Flo's Restaurant(模拟+优先队列)

    Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. 【BZOJ 1216】 1216: [HNOI2003]操作系统 (模拟+优先队列)

    1216: [HNOI2003]操作系统 Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自 ...

  6. hdu-5596 GTW likes gt(模拟+优先队列)

    题目链接: GTW likes gt  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Othe ...

  7. 排序+模拟+优先队列——cf1248E

    其实是个模拟题.. /* 每个人都有一个口渴时间,如果口渴时,其前面没有人在排队,那么其就去排队接水,反之一直等到前面没有人排队 问每个人接完水的时间 每个没轮到的人都在位置上等前面的人接完水,然后他 ...

  8. HDU1873 看病要排队【模拟+优先队列】

    看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. Codeforces Round #552 (Div. 3) E. Two Teams (模拟,优先队列,双向链表)

    题意:有\(n\)个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的\(k\)个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每 ...

随机推荐

  1. Python爬虫学习笔记-2.Requests库

    Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...

  2. iOS开发-获取子视图坐标系中Point、Rect在父视图坐标系中的实际值

    iOS提供了方法来完成上述值得转换 convertRect:toView:, convertRect:FromView: convertPoint:toView: and convertPoint:f ...

  3. 使用 Selenium

    Selenium 简介 Selenium 基本用法 Selenium 查找节点 Selenium 节点交互 Selenium 动作链 Selenium 执行 JavaScript Selenium 获 ...

  4. 邮件服务器日志:/var/log/maillog

    /var/log/maillog会记录包含系统上运行的邮件服务器的日志信息,比如记录 postfix 或 sendmail 运行时的日志信息 [root@localhost ~]# tail /var ...

  5. MQTT_DEMO

    1 /* 2 Copyright (c) 2009-2012 Roger Light <roger@atchoo.org> 3 All rights reserved. 4 5 Redis ...

  6. 深入浅出MFC——MFC程序的生死因果(三)

    1. 本章主要目的:从MFC程序代码中检验出一个Windows程序原本该有的程序进入点(WinMain).窗口类注册(RegisterClass).窗口产生(CreateWindow).消息循环(Me ...

  7. .net页面生命周期【转】

    .Net 页面生命周期IIS 所收到的对某 Microsoft ASP.NET 页面的每个请求都被移交给 ASP.NET HTTP 管线.HTTP 管线由一系列托管对象组成,这些对象按顺序处理该请求, ...

  8. 使用CreateProcess创建新的process 并返回process运行结束返回值

    转自:http://blog.csdn.net/zgl7903/article/details/5975284 转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法 如下:   #in ...

  9. 例说hg(五)————创建repository

    本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17933747) 有很多网站提供了免费的M ...

  10. 【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作

    前言 搭建完hadoop集群之后在windows环境下搭建java项目进行测试 操作hdfs中的文件 版本一 package com.slp.hadoop274.hdfs; import java.i ...