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

 #include <stdio.h>
#include <algorithm>
#include <set>
//#include <string.h>
#include <vector>
//#include <math.h>
#include <queue>
#include <iostream>
#include <string>
#include <map>
using namespace std;
const int maxn = ;
const int inf = ;
int n,k,m,l;
struct node{
string id;
int time,status;
};
vector<node> v,valid;
bool cmp(const node &a,const node &b){
return a.id==b.id?a.time<b.time:a.id<b.id;
}
bool cmp2(const node &a,const node &b){
return a.time<b.time;
}
map<string,int> mp;
int main(){
scanf("%d %d",&n,&k);
for(int i=;i<n;i++){
string id,sta;
int h,m,s;
cin>>id;
scanf("%d:%d:%d ",&h,&m,&s);
cin>>sta;
int time = *h+*m+s;
node tmp;
tmp.id=id;
tmp.time=time;
int status=;
if(sta=="out") status=;
tmp.status=status;
v.push_back(tmp);
}
sort(v.begin(),v.end(),cmp);
int longest=;
for(int i=;i<n-;i++){
if(v[i].id == v[i+].id && v[i].status== && v[i+].status==){
valid.push_back(v[i]);
valid.push_back(v[i+]);
mp[v[i].id] += v[i+].time - v[i].time;
if(mp[v[i].id]>longest) longest = mp[v[i].id];
}
}
sort(valid.begin(),valid.end(),cmp2);
int pos=,res=;
for(int j=;j<k;j++){
int h,m,s;
scanf("%d:%d:%d",&h,&m,&s);
int time = *h+*m+s;
//int res=0;
for(int i=pos;i<valid.size();i++){
if(valid[i].time<=time){
if(valid[i].status==) res++;
else res--;
}
else{
pos=i;
break;
}
}
printf("%d\n",res);
}
vector<string> maxs;
for(auto it:mp){
if(it.second==longest){
maxs.push_back(it.first);
}
}
for(int i=;i<maxs.size();i++){
printf("%s ",maxs[i].c_str());
}
printf("%02d:%02d:%02d",longest/,longest%/,longest%%);
}

注意点:需要两个排序函数,只根据题目要求的排序函数不够用,每次要从头遍历就会超时。注意到题目里特别给出note,查询按时间前后来,因此考虑第二个用时间排序。把所有有效记录再保存到一个vector中,对其进行时间排序,针对每一次查询,不需要从头开始,只要记录上一次查询到的位置,继续查询即可。每进入一次计数加1,出去减1,由于保证了所有记录都是有效的,直接输出计数即为答案。

PAT A1095 Cars on Campus (30 分)——排序,时序,从头遍历会超时的更多相关文章

  1. A1095 Cars on Campus (30 分)

    Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out time ...

  2. A1095 Cars on Campus (30)(30 分)

    A1095 Cars on Campus (30)(30 分) Zhejiang University has 6 campuses and a lot of gates. From each gat ...

  3. pat 甲级 Cars on Campus (30)

    Cars on Campus (30) 时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard  题目描述 Zhejiang University ...

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

    题意:输入两个正整数N和K(N<=1e4,K<=8e4),接着输入N行数据每行包括三个字符串表示车牌号,当前时间,进入或离开的状态.接着输入K次询问,输出当下停留在学校里的车辆数量.最后一 ...

  5. 【刷题-PAT】A1095 Cars on Campus (30 分)

    1095 Cars on Campus (30 分) Zhejiang University has 8 campuses and a lot of gates. From each gate we ...

  6. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  7. PAT 1095 Cars on Campus

    1095 Cars on Campus (30 分) Zhejiang University has 8 campuses and a lot of gates. From each gate we ...

  8. PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)

    1026 Table Tennis (30 分)   A table tennis club has N tables available to the public. The tables are ...

  9. PAT 甲级 1072 Gas Station (30 分)(dijstra)

    1072 Gas Station (30 分)   A gas station has to be built at such a location that the minimum distance ...

随机推荐

  1. concrrent类下 BlockingDeque 下 自己实现代码编写

    一.LinkedBlockingDeque简介 java6增加了两种容器类型,Deque和BlockingDeque,它们分别对Queue和BlockingQueue进行了扩展. Deque是一个双端 ...

  2. js获取选中日期的当周的周一和周日

    js获取选中日期的当周的周一和周日 第一种方法(推荐): function getWeekStr(str) { // 将字符串转为标准时间格式 str2 = Date.parse(str); let ...

  3. 转载:python生成以及打开json、csv和txt文件

    原文地址:https://blog.csdn.net/weixin_42555131/article/details/82012642 生成txt文件: mesg = "hello worl ...

  4. vue自定义一个v-model

    目标 js <template> <my-form v-model="form"> </my-form> </template> & ...

  5. Orchard详解--第二篇 启动

    Orchard Framework作为框架它与类库最大的区别就是框架是将一系列零散的组件组合在一起形成一个整体,接下来就对Orchard Framework如何分析Orchard如何将相关组件结合在一 ...

  6. SpringBoot Controller 中 HttpServletRequest ServletInputStream 读取不到数据该怎么处理

    在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器.在HiddenHttpMethodFilt ...

  7. Vue2 学习笔记1

    什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Wee ...

  8. 爬取mzi.com妹子图片网站(requests库)

    看了崔大佬的文章,写了这个爬虫,学习了!原文地址 现在该网站加了反爬机制,不过在headers里加上refere参数就行了. 以下代码仅做学习记录之用: from bs4 import Beautif ...

  9. Python介绍及环境搭建

    摘自http://www.cnblogs.com/sanzangTst/p/7278337.html Python零基础学习系列之二--Python介绍及环境搭建   1-1.Python简介: Py ...

  10. 线程ThreadDemo04

    package day190109; public class 线程ThreadDemo04 { public static void main(String[] args) throws Inter ...