hdu5437 Alisha’s Party 优先队列
2015-09-15 23:19
295 查看
2015年长春网络赛1001
题意:有k个人要来,其中要开m次门,每次开门之前前t个人到了,可以进去p个人,最后q次询问第几个进去的人的编号
分析:这题网络赛时想到用优先队列做了,结果一直WA感觉好没道理下去后发现要对(t,p)排序,还是太弱了啊,而且下去自己敲得代码还一直有错,原来有警告都没发现,结果又是一直WA啊。。。。
题意:有k个人要来,其中要开m次门,每次开门之前前t个人到了,可以进去p个人,最后q次询问第几个进去的人的编号
分析:这题网络赛时想到用优先队列做了,结果一直WA感觉好没道理下去后发现要对(t,p)排序,还是太弱了啊,而且下去自己敲得代码还一直有错,原来有警告都没发现,结果又是一直WA啊。。。。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <set> #include <vector> using namespace std; const int maxn = 150000 + 5; struct node { char name[201]; int id; int val; }; node s[maxn]; int ans[maxn]; struct st{ int t, p; bool operator < (const st &a) const { return t < a.t; } }in[maxn]; struct cmp { bool operator()(const int& i,const int&j)const//优先队列和sort里的运算符重载刚好相反,长记性了 { return s[i].val < s[j].val || (s[i].val == s[j].val && s[i].id > s[j].id); } }; priority_queue<int,vector<int>,cmp> q; int main() { //freopen("input.txt", "r", stdin); int t; scanf("%d",&t); while (t--) { int k, m, qus; memset(s, 0, sizeof(s)); memset(in, 0, sizeof(in)); scanf("%d%d%d", &k, &m, &qus); for (int i = 1; i <= k; i++) { scanf("%s%d", s[i].name, &s[i].val); s[i].id = i; } while (!q.empty())q.pop(); for (int i = 0; i < m; i++) { scanf("%d%d", &in[i].t, &in[i].p); } sort(in, in + m); int rear = 1; int cnt = 0; for (int i = 0; i < m; i++) { for (; rear <= in[i].t; rear++) { q.push(rear); } for (int j = 0; j < in[i].p; j++)//此处BUG让我调了好久,注意j { if (!q.empty()) { int pos=q.top(); ans[++cnt]=pos; q.pop(); } else break; } } for (; rear <= k; rear++) { q.push(rear); } while (!q.empty()) { int pos=q.top(); ans[++cnt]=pos; q.pop(); } int x; scanf("%d", &x); printf("%s", s[ans[x]].name); for (int i = 1; i < qus; i++) { scanf("%d", &x); printf(" %s", s[ans[x]].name); } printf("\n"); } return 0; }
相关文章推荐
- CoffeeScript入门
- Android studio中正确引入so文件的方法
- 【leetcode】Valid Parentheses
- jni中文字符串乱码的处理方法
- CodeForces 576A - Vasya and Petya's Game
- FP_growth算法
- 求List集合的并集、交集、差集
- Thinkphp 几个调试配置,常量设置项
- 关于JavaScript中的事件代理
- Nacl开发
- java线程中断和终止线程运行
- MyBatis学习手记(二)MyBatis缓存机制
- java学习记录之——泛型
- c++主函数输出圆柱体的半径和高,然后调用函数输出其体积
- 一千零一夜:检查数组包含某一目标元素的几种方法分析
- java序列化和反序列化
- 第一百六十六天 how can I 坚持
- scala初学笔记
- 9月10日 rpm和yum程序总结
- Docker 容器互联