poj2051解题报告(优先队列)

来源:互联网 发布:视频剪辑软件中文 编辑:程序博客网 时间:2024/06/16 00:33

题目大意:模拟一个任务管理器队列,优先出来时间小的的,若时间相同,其次是优先级高的。

解题思路:优先队列,重载操作符即可。

代码:

#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<iostream>using namespace std;struct task{        int Q_num;        int period;        int Time;        bool operator<(const task &a) const        {                return Time>a.Time||(Time==a.Time&&Q_num>a.Q_num);        }        task(int Q_num,int period,int Time):Q_num(Q_num),period(period),Time(Time){}};int main(){        priority_queue<task> q;        char s[20];        int n;        while(scanf("%s",s)&&s[0]!='#')        {                int a,b;                scanf("%d%d",&a,&b);                q.push(task(a,b,b));        }        scanf("%d",&n);        while(n--)        {                task ret=q.top();                q.pop();                printf("%d\n",ret.Q_num);                q.push(task(ret.Q_num,ret.period,ret.Time+ret.period));        }}


0 0