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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月13日 15时02分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Jaspersoft Studio:整合springboot搭建环境
2019-05-01
MybatisPlus入门之介绍
2019-05-01
springboot入门
2019-05-01
优化入门程序
2019-05-01
java配置
2019-05-01
springboot属性注入
2019-05-01
springboot的自动配置原理
2019-05-01
整合springMVC
2019-05-01
整合数据源
2019-05-01
整合mybatis
2019-05-01
整合事务及测试
2019-05-01
thymeleaf体验
2019-05-01
架构的演变
2019-05-01
rpc和http
2019-05-01
http客户端
2019-05-01
初始springCloud
2019-05-01
搭建服务提供方
2019-05-01
搭建服务调用方
2019-05-01
搭建eureka注册中心
2019-05-01
改造微服务注册到eureka注册中心
2019-05-01