PAT (Advanced Level) Practice - 1026 Table Tennis(30 分)
发布日期:2021-06-30 23:43:29 浏览次数:2 分类:技术文章

本文共 2937 字,大约阅读时间需要 9 分钟。

题目链接:

 

题目大意:略。

 

解题思路:

如果VIP客户遇到序号小的普通桌子和序号大的VIP桌子,优先选择VIP桌;如果VIP桌没有了,VIP客户和普通客户是平等的,VIP客户就不能插队了。

客户、桌子:总的一队,VIP的一队。

注意1:这里因为中途发现桌子用优先队列来做不方便,所以改用set来做:

VIP桌被占用后记得总桌子需要删除对应的VIP桌子;反之,总桌子在使用过程中,遇到使用VIP桌子时,在VIP桌子队中也要删除对应的VIP桌子。

注意2:(p.stime-p.atime)/60.0+1e-4,丢失精度问题

 

AC 代码

#include
#include
#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;const int maxn=1e4+10;struct peo{ int ah,am,as,sh,sm,ss; int atime,stime,ptime; int vip;}ps[maxn];struct player{ int tid,pid,etime; player(){} player(int tid,int pid,int etime):tid(tid),pid(pid),etime(etime){} friend bool operator<(player p1,player p2) { return p1.etime>p2.etime; }};priority_queue
pq;set
tbpq, vtbpq;vector
tbv, vipv;int vis[maxn], cnt[200];int cmp1(peo p1,peo p2){ return p1.atime
120) ptime=120; ps[i].ah=h, ps[i].am=m, ps[i].as=s, ps[i].ptime=ptime*60, ps[i].vip=vip; ps[i].atime=ps[i].ah*3600+ps[i].am*60+ps[i].as; } sort(ps,ps+n,cmp1); for(int i=0;i
t) { t=ps[l1].atime; continue; } else if(!pq.empty() && pq.top().etime>t && tbpq.empty()) { t=pq.top().etime; continue; } while(!pq.empty()) // 清理 ps[l1].atime<=t { int f=0; player pla=pq.top(); if(pla.etime<=t) { tbpq.insert(pla.tid); if(tbv[pla.tid]==1) vtbpq.insert(pla.tid); pq.pop(); f=1; } if(!f) break; } if(tbpq.empty()) continue; while(1) // 有空位 + 有人 { while(l1
t) break; int tid; if(!vtbpq.empty() && l2

 

Debug 代码

#include
#include
#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;const int maxn=1e4+10;struct peo{ int ah,am,as,sh,sm,ss; int atime,stime,ptime; int vip;}ps[maxn];struct player{ int tid,pid,etime; player(){} player(int tid,int pid,int etime):tid(tid),pid(pid),etime(etime){} friend bool operator<(player p1,player p2) { return p1.etime>p2.etime; }};priority_queue
pq;set
tbpq, vtbpq;vector
tbv, vipv;int vis[maxn], cnt[200];int cmp1(peo p1,peo p2){ return p1.atime
120) ptime=120; ps[i].ah=h, ps[i].am=m, ps[i].as=s, ps[i].ptime=ptime*60, ps[i].vip=vip; ps[i].atime=ps[i].ah*3600+ps[i].am*60+ps[i].as; } sort(ps,ps+n,cmp1); for(int i=0;i
t) { t=ps[l1].atime; continue; } else if(!pq.empty() && pq.top().etime>t && tbpq.empty()) { t=pq.top().etime; continue; } // ps[l1].atime<=t while(!pq.empty()) // 清理 { int f=0; player pla=pq.top(); if(pla.etime<=t) { tbpq.insert(pla.tid); if(tbv[pla.tid]==1) vtbpq.insert(pla.tid); pq.pop(); f=1; } if(!f) break; } if(tbpq.empty()) continue; while(1) // 有空位 + 有人 { while(l1
t) break; int tid; if(!vtbpq.empty() && l2

 

转载地址:https://lux-sun.blog.csdn.net/article/details/82182444 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:PAT (Advanced Level) Practice - 1103 Integer Factorization(30 分)
下一篇:PAT (Advanced Level) Practice - 1119 Pre- and Post-order Traversals(30 分)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月13日 15时02分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章