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 }

 

posted @ 2021-01-13 18:50  BlackSnow  阅读(84)  评论(0)    收藏  举报