hdu 1509 Windows Message Queue
两种操作 GET&PUT
PUT就是把message name和两个整数放进去 GET就是把符合要求的message name和parameter输出
要求是 priority的值小的 如果值相同 就把先出现的输出
用优先队列存储很方便 主要的就是那个node的排序问题 写好排序方式就好了
没有很难写的地方只要把输入以及相关存储搞好就可以了
贴个代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#include <queue>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
struct node
{
int pri,para;
int order;
char s[1000];
bool operator <(const node p)const
{
if(pri!=p.pri) return pri>p.pri;
return order>p.order;
}
};
node p,q;
int main()
{
//freopen("ceshi.txt","r",stdin);
int cnt=0;
priority_queue<node> Q;
char ch[5];
while(scanf("%s",ch)!=EOF)
{
cnt++;
if(ch[0]=='G')
{
if(!Q.empty())
{
q=Q.top(); Q.pop();
printf("%s %d\n",q.s,q.para);
}
else printf("EMPTY QUEUE!\n");
}
else
{
char ss[1010];
scanf("%s",ss);
strcpy(q.s,ss);
scanf("%d%d",&q.para,&q.pri);
q.order=cnt;
Q.push(q);
}
}
return 0;
}