LA3135 优先级队列模版题

优先级队列priority_queue优先级函数写法:

struct Item
{
    int QNum,period,time;
    //优先级比较函数,优先级高的先出队
    bool operator <(const Item& a)const//注意这里要加const
    {
        return time>a.time||(time==a.time&&QNum>a.QNum);//注意这里实现的是内部<比较,所以是优先级低的返回true
    }
};

这题直接用裸的优先级队列就能过,主要是学习了下优先级队列的写法.

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<queue>
#include<cstring>
#define maxn 10005
#define INF 0xfffffff
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(i,s,t) for(int i=s;i<=t;i++)
#define ull unsigned long long
#define ll long long
using namespace std;
struct Item
{
    int QNum,period,time;
    //优先级比较函数,优先级高的先出队
    bool operator <(const Item& a)const//注意这里要加const
    {
        return time>a.time||(time==a.time&&QNum>a.QNum);//注意这里实现的是内部<比较,所以是优先级低的返回true
    }
};
priority_queue<Item> q;
char s[22];
int main()
{
    while(scanf("%s",s)!=EOF)
    {
        if(s[0]=='#') break;
        Item tmp;
        scanf("%d%d",&tmp.QNum,&tmp.period);
        tmp.time=tmp.period;
        q.push(tmp);
    }
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        Item tmp=q.top();
        q.pop();
        printf("%d\n",tmp.QNum);
        tmp.time=tmp.time+tmp.period;
        q.push(tmp);
    }
	return 0;
}


你可能感兴趣的:(LA3135 优先级队列模版题)