看病要排队——hdu1873
http://acm.hdu.edu.cn/showproblem.php?pid=1873
这道题使用的是优先队列。主要比较函数的写法!
#include<stdio.h> #include<queue> #include<vector> #include<functional> #include<string.h> #include<string> #include<iostream> using namespace std; class T { public: int x, id; T(int a, int b):x(a),id(b) { } }; bool operator < (const T &t1, const T &t2) { if(t1.x < t2.x){ return true; }else if(t1.x==t2.x&&t1.id>t2.id){ return true; } return false; } int n,a,b; char s[10]; int main(){ while(scanf("%d",&n)!=EOF){ priority_queue<T> q1,q2,q3; int now=1; for(int i=0;i<n;i++){ scanf("%s",s); if(strcmp(s,"IN")==0){ scanf("%d%d",&b,&a); if(b==1){ q1.push(T(a,now)); }else if(b==2){ q2.push(T(a,now)); }else{ q3.push(T(a,now)); } now++; }else{ scanf("%d",&b); if(b==1){ if(q1.empty())printf("EMPTY\n"); else { printf("%d\n",q1.top().id); q1.pop(); } }else if(b==2){ if(q2.empty())printf("EMPTY\n"); else { printf("%d\n",q2.top().id); q2.pop(); } }else{ if(q3.empty())printf("EMPTY\n"); else { printf("%d\n",q3.top().id); q3.pop(); } } } } } return 0; }