priority_queue poj2051 Argus

来源:互联网 发布:淘宝助手批量上传 编辑:程序博客网 时间:2024/05/16 09:52
STL学习之priority_queue 题意就是在一段时间内有用户注册要求每行先输入命令(Register/"#")如果是Register就输入用户的id和输出这个id的时间间隔(每经过指定的时间间隔就输出该用户名),如果是#结束输入,最后输入一个数字ans,要求按照时间输出前ans个用户名,如果同一个时间有多个用户名要输出,则按照id大小输出。总体思路就是按照时间排序,用一个结构体和sort就搞定,但是用优先对列可以自动排序,来的方便得多。
//priorty_queue的使用学习,参考资料cplusplus以及博客priority_queue的使用方法等#include <iostream>#include <cstdio>#include <string>#include <queue>using namespace std;struct Register{    int id;    int period;    int time;};struct cmp{    bool operator()(Register a,Register b){        if(a.time!=b.time){            return a.time>b.time;//升序        }        return a.id>b.id;//升序    }};int main(){    priority_queue <Register,vector<Register>,cmp> que;    string inpt;    while(cin>>inpt && (inpt!="#")){        Register reg;        scanf("%d%d",&reg.id,&reg.period);        reg.time=reg.period;        que.push(reg);    }    int ans;    scanf("%d",&ans);    while(ans--){        Register r=que.top();        que.pop();        printf("%d\n",r.id);        r.time+=r.period;        que.push(r);    }    return 0;}

0 0