F - 看病要排队
https://vjudge.net/contest/415894#problem/F
注意重载结构体的大小比较运算符
第一个priority是后面传进去的p,当优先级一致时,先到先治
1 // 2 // Created by w on 2021-01-09. 3 // 4 5 #include <iostream> 6 #include <cstring> 7 #include <cstdio> 8 #include <queue> 9 using namespace std; 10 struct person 11 { 12 int id,priority; 13 person(int _id,int _priority): id(_id),priority(_priority){}; 14 bool operator < (const person &p)const 15 { 16 if(p.priority==priority) 17 return p.id<id; 18 return p.priority > priority; 19 } 20 }; 21 int main() 22 { 23 int t; 24 while (cin>>t) 25 { 26 int id=1;//初始化编号 27 priority_queue<person> pq[4]; 28 while (t--) 29 { 30 string s1; 31 cin>>s1; 32 if(s1=="IN") 33 { 34 int dr,priority; 35 cin>>dr>>priority; 36 pq[dr].push(person(id,priority)); 37 id++; 38 // cout<<pq[dr].top().id<<endl; 39 } else 40 { 41 int dr; 42 cin>>dr; 43 if(!pq[dr].empty()) 44 { 45 cout<<pq[dr].top().id<<endl; 46 pq[dr].pop(); 47 } else 48 { 49 cout<<"EMPTY"<<endl; 50 } 51 } 52 } 53 } 54 return 0; 55 }
另一种重载方式(这个好像更好懂)
1 // 2 // Created by w on 2021-01-09. 3 // 4 5 #include <iostream> 6 #include <cstring> 7 #include <cstdio> 8 #include <queue> 9 using namespace std; 10 struct person 11 { 12 int id,priority; 13 person(int _id,int _priority): id(_id),priority(_priority){}; 14 15 }; 16 bool operator < (const person &x,const person &y) 17 { 18 if(x.priority==y.priority) 19 return x.id>y.id; 20 return x.priority < y.priority; 21 } 22 int main() 23 { 24 int t; 25 while (cin>>t) 26 { 27 int id=1;//初始化编号 28 priority_queue<person> pq[4]; 29 while (t--) 30 { 31 string s1; 32 cin>>s1; 33 if(s1=="IN") 34 { 35 int dr,priority; 36 cin>>dr>>priority; 37 pq[dr].push(person(id,priority)); 38 id++; 39 // cout<<pq[dr].top().id<<endl; 40 } else 41 { 42 int dr; 43 cin>>dr; 44 if(!pq[dr].empty()) 45 { 46 cout<<pq[dr].top().id<<endl; 47 pq[dr].pop(); 48 } else 49 { 50 cout<<"EMPTY"<<endl; 51 } 52 } 53 } 54 } 55 return 0; 56 }

浙公网安备 33010602011771号