Alisha’s Party---hdu5437(模拟+优先队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5437
题意:公主有k个朋友来参加她的生日party,每个人都会带价值为v[i]的礼物过来,在所有人到齐之前公主会打开大门m次,每次开门就是在第t个人到来之后,然后让p个人进入大厅,如果当前人数不足p人,则让所有人都进去,最后在所有人都来到门口时,再次打开门,让剩下所有的人都进入大厅;当然选择礼物价值大的先进入,如果两个人的礼物价值相等,则先来的先进,现在有q个问题,问第ni个进入大厅的人是谁;
我们可以用优先队列存入每次开门可以进去的人,然后按顺序依次进入p个人,模拟,注意细节即可;
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <map>
- #include <queue>
- #include <stack>
- #include <math.h>
- using namespace std;
- #define met(a, b) memset(a, b, sizeof(a))
- #define N 150003
- #define INF 0x3f3f3f3f
- typedef long long LL;
- struct node
- {
- int Time, v;
- char Name[];
- friend bool operator < (node p, node q)
- {
- if(p.v != q.v)
- return p.v < q.v;
- return p.Time > q.Time;
- }
- }a[N];
- struct Open
- {
- int t, cnt;
- bool friend operator < (Open p, Open q)
- {
- return p.t < q.t;
- }
- }b[N];
- int n, m, q;
- char ans[N][];
- void solve()
- {
- priority_queue<node> Q;///优先队列注意优先级;
- node p;
- int j = , k = ;
- for(int i=; i<=m; i++)
- {
- while(j <= b[i].t && j<=n)///把此次开门能进去的先放入队列;
- {
- Q.push(a[j]);
- j++;
- }
- int num = b[i].cnt;
- while(!Q.empty() && num --)///每次进num个人,如果不足num就是全进入,进入大厅,即出队列;
- {
- p = Q.top();
- Q.pop();
- strcpy(ans[k++], p.Name);
- }
- }
- while(j<=n)///把剩下没有进入队列的放入队列;
- {
- Q.push(a[j]);
- j++;
- }
- while(!Q.empty())///当所有人都到了之后,再次打开门,让所有人都进去;
- {
- p = Q.top();
- Q.pop();
- strcpy(ans[k++], p.Name);
- }
- }
- int main()
- {
- int T;
- scanf("%d", &T);
- while(T--)
- {
- scanf("%d %d %d", &n, &m, &q);
- for(int i=; i<=n; i++)
- {
- scanf("%s %d", a[i].Name, &a[i].v);
- a[i].Time = i;
- }
- for(int i=; i<=m; i++)
- scanf("%d %d", &b[i].t, &b[i].cnt);
- sort(b+, b+m+);
- solve();
- for(int i=; i<=q; i++)
- {
- int x;
- scanf("%d", &x);
- printf("%s%c", ans[x], i==q?'\n':' ');
- }
- }
- return ;
- }
Alisha’s Party---hdu5437(模拟+优先队列)的更多相关文章
- hdu6136[模拟+优先队列] 2017多校8
有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long ...
- Alisha’s Party (HDU5437)优先队列+模拟
Alisha 举办聚会,会在一定朋友到达时打开门,并允许相应数量的朋友进入,带的礼物价值大的先进,最后一个人到达之后放外面的所有人进来.用优先队列模拟即可.需要定义朋友结构体,存储每个人的到达顺序以及 ...
- hdu 5437 Alisha’s Party 模拟 优先队列
Problem Description Princess Alisha invites her friends to come to her birthday party. Each of her f ...
- HDU 1103 Flo's Restaurant(模拟+优先队列)
Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 【BZOJ 1216】 1216: [HNOI2003]操作系统 (模拟+优先队列)
1216: [HNOI2003]操作系统 Description 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自 ...
- hdu-5596 GTW likes gt(模拟+优先队列)
题目链接: GTW likes gt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- 排序+模拟+优先队列——cf1248E
其实是个模拟题.. /* 每个人都有一个口渴时间,如果口渴时,其前面没有人在排队,那么其就去排队接水,反之一直等到前面没有人排队 问每个人接完水的时间 每个没轮到的人都在位置上等前面的人接完水,然后他 ...
- HDU1873 看病要排队【模拟+优先队列】
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Codeforces Round #552 (Div. 3) E. Two Teams (模拟,优先队列,双向链表)
题意:有\(n\)个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的\(k\)个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每 ...
随机推荐
- Python爬虫学习笔记-2.Requests库
Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...
- iOS开发-获取子视图坐标系中Point、Rect在父视图坐标系中的实际值
iOS提供了方法来完成上述值得转换 convertRect:toView:, convertRect:FromView: convertPoint:toView: and convertPoint:f ...
- 使用 Selenium
Selenium 简介 Selenium 基本用法 Selenium 查找节点 Selenium 节点交互 Selenium 动作链 Selenium 执行 JavaScript Selenium 获 ...
- 邮件服务器日志:/var/log/maillog
/var/log/maillog会记录包含系统上运行的邮件服务器的日志信息,比如记录 postfix 或 sendmail 运行时的日志信息 [root@localhost ~]# tail /var ...
- MQTT_DEMO
1 /* 2 Copyright (c) 2009-2012 Roger Light <roger@atchoo.org> 3 All rights reserved. 4 5 Redis ...
- 深入浅出MFC——MFC程序的生死因果(三)
1. 本章主要目的:从MFC程序代码中检验出一个Windows程序原本该有的程序进入点(WinMain).窗口类注册(RegisterClass).窗口产生(CreateWindow).消息循环(Me ...
- .net页面生命周期【转】
.Net 页面生命周期IIS 所收到的对某 Microsoft ASP.NET 页面的每个请求都被移交给 ASP.NET HTTP 管线.HTTP 管线由一系列托管对象组成,这些对象按顺序处理该请求, ...
- 使用CreateProcess创建新的process 并返回process运行结束返回值
转自:http://blog.csdn.net/zgl7903/article/details/5975284 转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法 如下: #in ...
- 例说hg(五)————创建repository
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17933747) 有很多网站提供了免费的M ...
- 【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作
前言 搭建完hadoop集群之后在windows环境下搭建java项目进行测试 操作hdfs中的文件 版本一 package com.slp.hadoop274.hdfs; import java.i ...