HDU 5437 Alisha’s Party
来源:互联网 发布:php 字符串true false 编辑:程序博客网 时间:2024/06/01 09:08
题目大意
公主阿莉莎邀请她的朋友参加她的生日宴会,但是大厅不够大,所以就不能一次性让所有的人进来,只能允许部分人进来,同时部分人中手里拿的礼物价值最大的最先进来(我去,以前也这样搞!!!)。于是下面给T组数据,k表示有有多少个朋友被邀请,m表示门会开几次,q表示会询问多少次第几个进来的人是谁。
题目分析
给出了每个人到来的时间,首先很明显要对所有人进行排序,这里需要注意的就是重载小于STL中priority_queue需要注意的问题,价值大的肯定排在前面,相同价值需要注意是编号小的排在前面。于是进行模拟,通过一个二维数组存储所有的人按顺序进去的名字,询问时对应输出就可以了。同时需要注意有可能门不会开,但是所有人都来了,门最终还是会打开,所有人都会进去,就是最好处理一下门已经开了m次之后还没有进去的人就可以了。具体见代码。
#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <algorithm>using namespace std;const int maxn = 150005;struct Node //注意重载运算符的时候需要注意相同的价值先来的先进去{ char name[204]; int val,id; bool operator < (const Node temp)const { if(val == temp.val) return id > temp.id; else return val < temp.val; }}node[maxn];struct Ret //需要对m组数据进行排序,因为给出的时间不一定是递增的,本以为会超时,看了一下时间给了3s{ int t,p; bool operator < (const Ret temp) const { return t < temp.t; }}ret[maxn];char str[maxn][204]; //用于存每个人按顺序到来的名字int main(){ int T; scanf("%d", &T); while(T--) { int k,m,q,query; scanf("%d%d%d", &k, &m, &q); for(int i = 1; i <= k; i++) { scanf("%s %d", node[i].name, &node[i].val); node[i].id = i; } for(int i = 0; i < m; i++) scanf("%d%d", &ret[i].t, &ret[i].p); sort(ret, ret+m); priority_queue <Node> pq; //优先队列,价值最大的优先 while(!pq.empty()) pq.pop(); int from = 1,flag = 1; memset(str, '\0', sizeof(str)); for(int i = 0; i < m; i++) { for(int j = from; j <= ret[i].t; j++) pq.push(node[j]); from = ret[i].t+1; for(int j = 1; j <= ret[i].p; j++) { if(!pq.empty()) { Node temp = pq.top(); pq.pop(); strcpy(str[flag++], temp.name); } else break; } } for(int i = from; i <= k; i++) pq.push(node[i]); while(!pq.empty()) //有可能m等于0,但是最后有朋友都来了时会把门打开,需要处理这种情况 { Node temp = pq.top(); pq.pop(); strcpy(str[flag++], temp.name); } for(int i = 1; i <= q; i++) //输出时的格式同样需要注意 { scanf("%d", &query); if(i != q) printf("%s ", str[query]); else printf("%s\n", str[query]); } } return 0;}
0 0
- hdu 5437 Alisha’s Party
- hdu 5437 Alisha’s Party
- HDU 5437 Alisha’s Party
- HDU 5437 Alisha’s Party
- HDU-5437 Alisha’s Party
- HDU 5437 Alisha’s Party
- HDU 5437 Alisha’s Party
- hdu 5437(Alisha’s Party)
- HDU 5437 Alisha’s Party
- HDU 5437 Alisha’s Party
- Alisha’s Party HDU
- HDU 5437 Alisha’s Party 优先队列
- hdu 5437 Alisha’s Party 优先队列
- HDU 5437 Alisha’s Party(模拟)
- hdu 5437Alisha’s Party(优先队列)
- hdu 5437 Alisha’s Party (优先队列)
- hdu 5437 Alisha’s Party 优先队列
- [HDU 5437]Alisha’s Party[模拟]
- java的若干问题(4)——java常用类库
- android studio 从Git拉工程 前期配置
- android stuio中布局预览错误解决方法
- Android 5 消息机制源码分析
- hdu3709Balanced Number【数位dp记忆化搜索】
- HDU 5437 Alisha’s Party
- Gof 设计模式 结构型
- 【CodeForces】651B - Beautiful Paintings(暴力)
- 面试题30
- 【bzoj1179】[Apio2009]Atm
- 自定义控件实现水波纹效果
- Servlet中的Filter详解
- Android屏幕适配总结
- Android数据库 之 SQLite数据库