题干:

Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at any specific time point, the number of cars parking on campus, and at the end of the day find the cars that have parked for the longest time period.

Input Specification:

Each input file contains one test case. Each case starts with two positive integers N (≤10​4​​), the number of records, and K (≤8×10​4​​) the number of queries. Then N lines follow, each gives a record in the format:

plate_number hh:mm:ss status

where plate_number is a string of 7 English capital letters or 1-digit numbers; hh:mm:ss represents the time point in a day by hour:minute:second, with the earliest time being 00:00:00 and the latest 23:59:59; and status is either in or out.

Note that all times will be within a single day. Each in record is paired with the chronologically next record for the same car provided it is an out record. Any in records that are not paired with an out record are ignored, as are out records not paired with an in record. It is guaranteed that at least one car is well paired in the input, and no car is both in and out at the same moment. Times are recorded using a 24-hour clock.

Then K lines of queries follow, each gives a time point in the format hh:mm:ss. Note: the queries are given in ascending order of the times.

Output Specification:

For each query, output in a line the total number of cars parking on campus. The last line of output is supposed to give the plate number of the car that has parked for the longest time period, and the corresponding time length. If such a car is not unique, then output all of their plate numbers in a line in alphabetical order, separated by a space.

Sample Input:

16 7
JH007BD 18:00:01 in
ZD00001 11:30:08 out
DB8888A 13:00:00 out
ZA3Q625 23:59:50 out
ZA133CH 10:23:00 in
ZD00001 04:09:59 in
JH007BD 05:09:59 in
ZA3Q625 11:42:01 out
JH007BD 05:10:33 in
ZA3Q625 06:30:50 in
JH007BD 12:23:42 out
ZA3Q625 23:55:00 in
JH007BD 12:24:23 out
ZA133CH 17:11:22 out
JH007BD 18:07:01 out
DB8888A 06:30:50 in
05:10:00
06:30:50
11:00:00
12:23:42
14:00:00
18:00:00
23:59:00

Sample Output:

1
4
5
2
1
0
1
JH007BD ZD00001 07:20:09

题目大意:

给出n个车牌号、时间点、进出状态的记录,然后查询k个时间点这时校园内的车辆个数。最后还要输出在校园里面呆的时间最长的车的车牌号,以及呆了多久的时间。如果有多辆车就按照它的字母从小到大输出车牌。
配对要求是,如果一个车多次进入未出,取最后一个值;如果一个车多次out未进入,取第一个值。
注意:一个车可能出入校园好多次,停车的时间应该取之和。

解题报告:

注意凑样例的过程中,发现是要先对记录表单进行排错,然后再进行统计。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
char s[105],op[105];
int n,q;
struct Node {string name;int op;int Time;
} R[MAX];
bool cmp(Node a,Node b) {if(a.Time != b.Time) return a.Time < b.Time;else return a.op < b.op;
}
map<string,int> state;//记录每辆车的状态
map<string,int> Time;//每辆车的停车时间
map<string,int> has;
vector<string> ans;
int anst;
bool ok[MAX];
int main()
{memset(ok,1,sizeof ok);cin>>n>>q;for(int hh,mm,ss,i = 1; i<=n; i++) {scanf("%s",s);scanf("%d:%d:%d",&hh,&mm,&ss);scanf("%s",op);R[i].name = s;R[i].op = (op[0] == 'i' ? 1 : 2);R[i].Time = hh*3600+mm*60+ss;}for(int hh,mm,ss,i = 1; i<=q; i++) {scanf("%d:%d:%d",&hh,&mm,&ss);R[n+i].op = 3;R[n+i].Time = hh*3600+mm*60+ss;}sort(R+1,R+n+q+1,cmp);has.clear();for(int i = 1; i<=n+q; i++) {if(R[i].op == 1) {has[R[i].name] = 1;}else if(R[i].op == 2){if(has[R[i].name] == 0) ok[i] = 0; has[R[i].name] = 0;}}for(int i = 1; i<=n+q; i++) has[R[i].name] = -1;for(int i = n+q; i>=1; i--) {if(ok[i] == 0) continue;if(R[i].op == 2) {has[R[i].name] = 0;}else if(R[i].op == 1) {if(has[R[i].name] != 0) ok[i] = 0; has[R[i].name] = 1;}}has.clear();int cur = 0;for(int i = 1; i<=n+q; i++) {if(ok[i] == 0) continue;if(R[i].op == 3) printf("%d\n",cur);else if(R[i].op == 1) {state[R[i].name] = R[i].Time;has[R[i].name] = 1;cur++;} else {has[R[i].name] = 0;cur--;Time[R[i].name] += R[i].Time - state[R[i].name];}}for(auto tar : Time) {if(tar.second > anst) {anst = tar.second; ans.clear(); ans.pb(tar.first);}else if(tar.second == anst) {ans.pb(tar.first);}}sort(ans.begin(),ans.end());for(auto tar : ans) {cout << tar << " ";}int hh,mm,ss;hh = anst / 3600; anst -= hh * 3600;mm = anst / 60; anst -= mm * 60;ss = anst;printf("%02d:%02d:%02d\n",hh,mm,ss);return 0 ;
}

【PAT - 甲级1095】Cars on Campus (30分)(模拟)相关推荐

  1. 【算法笔记题解】PAT A.1095 Cars on Campus (30 分)

    前言 今天不开心就撸了一道PAT的题. 所有的合集相关源码我都更新在gitee上了需要自取xingleigao/study - Gitee.com 题目描述 1095 Cars on Campus ( ...

  2. 【PAT甲级】1095 Cars on Campus (30分)

    解题过程的小记录,如有错误欢迎指出. 难度:四星(运行超时orz崩溃题) 小导航~ 题目分析 注意点 我的解题过程 思路 bug 代码 dalao的代码 借鉴点 题目分析 给出停车进出记录和查询时间. ...

  3. 1095 Cars on Campus (30 分)【难 / 模拟 未完成】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805371602845696

  4. PAT甲级1076 Forwards on Weibo (30 分) :[C++题解]图论、bfs

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: BFS如何搜前k层?统计前k层的点数. ac代码 #include<bits/stdc++.h> using names ...

  5. PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:m是背包容量,a1,a2,....,ana_1,a_2,....,a_na1​,a2​,....,an​是n个物品,第i个物品的体积是 ...

  6. PAT甲级1045 Favorite Color Stripe (30 分):[C++题解]最佳彩色带、DP、公共子序列变形

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:这是一个公共子序列的问题.但是有点变式,序列a和序列b不是完全等价的,序列a的每个元素可以对应多个相同元素,而且有些元素可以不使用.比 ...

  7. PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历

    文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...

  8. PAT甲级1143 Lowest Common Ancestor (30 分):[C++题解]LCA、最低公共祖先

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:二叉搜索树的中序遍历是隐含给定的,它的中序遍历就是从小到大排列. 所以这道题先是根据给定的前序遍历和中序遍历,建树. 建树的时候需要用 ...

  9. PAT甲级-1045 Favorite Color Stripe (30分)

    点击链接PAT甲级-AC全解汇总 题目: Eva is trying to make her own color stripe out of a given one. She would like t ...

最新文章

  1. centos vnc配置笔记
  2. HDLBits 系列(41)根据仿真波形来设计电路之组合逻辑
  3. ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
  4. 【百家稷学】从传统方法到深度学习,人脸算法和应用的演变(河南平顶山学院技术分享)...
  5. cad文字递增快捷键_CAD的这些快捷键,好用到暴风哭泣,一秒钟完成3小时操作...
  6. stream流【java8 二】
  7. 2019牛客暑期多校训练营(第十场)C - Gifted Composer (二分+哈希)
  8. Entity Data Model (EDM) 深入分析, Part 3
  9. Django学习总结①
  10. 学完Java后可从事的十大领域!
  11. 栈的应用-后缀表达式
  12. 霍夫丁不等式及其他相关不等式证明
  13. Unity-创建一个小地图
  14. 湖南师范大学2018年大学生程序设计竞赛新生赛 F-小名的回答
  15. 我有一个还在蹒跚学步的小孩是否应该学习Python?
  16. Oracle一次性查询超过1000条数据的方法(分批查询)
  17. 关于推荐系统的全面调研与探讨!千万别错过!
  18. javascript百炼成仙 第一章 掌握JavaScript基础 1.12 JavaScript运算符
  19. Python脚本和图片相互转换
  20. 线性表的顺序、链式存储结构基本操作

热门文章

  1. 关闭弹出窗体,刷新父页面
  2. Oracle Database Appliance
  3. VistaDB 数据库,.NET的新选择
  4. 【数据结构与算法】哈希算法
  5. html网页距离顶部50像素,HTML5 教程之CSS Padding(填充)
  6. python条件表达式三门课至少有一门及格_Python/ MySQL练习题(一)
  7. 1285B. Just Eat It
  8. java getapplicationcontext_java – getApplicationContext()中的空指针
  9. java 代码重用需要注意的事项_程序员笔记|编写高性能的Java代码需要注意的4个问题...
  10. 计算机考上研究生暑假去哪里实习_浅谈化工与计算机行业