myj的补作业计划HrbustOJ新生赛(struct+优先队列)
Description |
作为一个合格的大学牲,myj也常常被作业和各种报告所烦恼 这天myj有在准备赶作业,但是在他赶作业和报告的过程中,老师又不停的在布置新的作业和报告,所以myj决定将这些作业使用一个叫做优先级的东西来进行排序,将老师要求尽快完成的作业设置的优先级非常高,而那些可以拖的作业就尽量拖 myj一向奉行“摸鱼,划水,躺平”的学习方式,所以他只会在自己想做作业的时候才做,并且能够瞬间完成这个作业,而做过的作业就会从这个作业序列中移除 对于myj选择哪一份作业做,可以将这个过程做如下描述:myj先会找到优先级最高的作业做,如果存在多个优先级一样的作业,myj会先去完成一个最先被布置下来的作业 现在给你一些询问,要求你对于一些询问输出合适的答案 |
Input |
第一行一个整数T,表示测试数据的组数 对于每组测试数据,第一行有一个整数n,表示下面出现的询问次数 接下来n行,每一行会先输入一个整数(只有1或者2)表示两种操作中的一种,如果是1,表示执行操作1,如果是2,表示执行操作2 操作1:包含一个字符串(无空格,长度小于20)和一个数字,分别表示作业的名字和优先级顺序 操作2:表示这是myj会按照上方的选择方式去选择一份作业完成,并且你需要输出myj完成的作业的名字 输入保证myj在想做作业的时候一定有作业可做 测试数据小于10组 每组数据n不大于100000 对于所有数据n的总和不大于550000 |
Output |
每一行包含一个字符串,表示myj选择的作业 |
Sample Input |
2 |
Sample Output |
English a c b d f |
Hint |
每输出一行都应该有一个换行符 行末没有多余空格 |
#include<bits/stdc++.h>
using namespace std;
struct node {
string name;
int pri;
bool operator<(const node& that)const {
return pri < that.pri;//优先队列中需要相反,即这次表示的是从d大到小进行排序;
}
};
priority_queue<node>q;
queue<string>q2;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
while (n--) {
int t;
cin >> t;
if (t == 1) {
//结构体放入优先队列中
node work;
string s;
int num;
cin >> s >> num;
work.name = s;
work.pri = num;
q.push(work);
}
else {
q2.push(q.top().name);
q.pop();
}
}
while (!q2.empty()) {
cout<<q2.front()<<endl;
q2.pop();
}
}
}
测试了多个样例都能通过,但是wrong answer,实在无法找出bug;