PAT甲级-1095 Cars on Campus (30 分)
发布日期:2022-02-10 08:11:00 浏览次数:22 分类:技术文章

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

题目:
分析:要求输出某个时刻停车场的人数,若in和out不匹配则本条记录无效,如in之后还是in则该辆车是无效的。本题防止超时的关键就是给的query是递增的,就不用每次都从0开始遍历。
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MAX 999999999typedef long long ll;int n,m,k;struct Node{ string plate; int time; string status; int flag; int yes;}node[100001];map
ma;int cmp(Node x, Node y){ if(x.plate == y.plate) return x.time < y.time; return x.plate < y.plate;}int cmp1(Node x, Node y){ return x.time < y.time;}int main(){ cin>>n>>k; for(int i = 0; i
>x; scanf("%d:%d:%d",&a,&b,&c); cin>>y; node[i].plate = x; node[i].status = y; node[i].time = a * 3600 + b * 60 + c; node[i].flag = y[0]=='i'?0:1; } sort(node,node+n,cmp); int mmax = -1; for(int i = 0 ; i < n - 1 ;i ++) { if(node[i].plate == node[i+1].plate && node[i].flag == 0 && node[i+1].flag == 1){ ma[node[i].plate] += node[i+1].time - node[i].time; mmax = max(mmax, ma[node[i].plate]); node[i].yes = node[i+1].yes = 1; } } sort(node,node+n,cmp1); int j = 0,cnt = 0; for(int i = 0 ; i < k ; i++) { int a,b,c; scanf("%d:%d:%d",&a,&b,&c); int t = a * 3600 + b * 60 + c; for(; j < n && node[j].time <= t;j ++) { if(node[j].yes == 1 && node[j].status == "in"){ cnt++; } if(node[j].yes == 1 && node[j].status == "out"){ cnt--; } } cout<
<
second == mmax) cout<
first<<" "; } printf("%02d:%02d:%02d",mmax/3600,mmax%3600/60,mmax%60); return 0;}

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

上一篇:PAT甲级-1118 Birds in Forest (25 分)
下一篇:PAT甲级-1097 Deduplication on a Linked List (25 分)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月05日 14时39分16秒