PAT A1095 Cars on Campus (30 分)——排序,时序,从头遍历会超时
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 (≤104), the number of records, and K (≤8×104) 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 分)——排序,时序,从头遍历会超时的更多相关文章
- 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 ...
- 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 ...
- pat 甲级 Cars on Campus (30)
Cars on Campus (30) 时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard 题目描述 Zhejiang University ...
- 【PAT甲级】1095 Cars on Campus (30 分)
题意:输入两个正整数N和K(N<=1e4,K<=8e4),接着输入N行数据每行包括三个字符串表示车牌号,当前时间,进入或离开的状态.接着输入K次询问,输出当下停留在学校里的车辆数量.最后一 ...
- 【刷题-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 ...
- PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)
1080 Graduate Admission (30 分) It is said that in 2011, there are about 100 graduate schools ready ...
- PAT 1095 Cars on Campus
1095 Cars on Campus (30 分) Zhejiang University has 8 campuses and a lot of gates. From each gate we ...
- PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)
1026 Table Tennis (30 分) A table tennis club has N tables available to the public. The tables are ...
- 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 ...
随机推荐
- POJ 2311 Cutting Game(二维SG+Multi-Nim)
Cutting Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4798 Accepted: 1756 Desc ...
- P3275 [SCOI2011]糖果
题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
- Landsat数据下载方法小结
本文转载自:http://malagis.com/landsat-data-download.html 本文介绍下载Landsat数据的方法. Landsat(美国陆地卫星)是遥感应用中常用的卫星数据 ...
- Windows 不能在本地计算机启动 OracleDBConsoleorcl的问题解决方法
解决步骤如下: 1.开始->运行cmd 2.执行 emctl start dbconsole 输入:C:\Documents and Settings\xcl>emctl start db ...
- 《高性能JavaScript》--读书笔记
第一章 加载和运行 延迟脚本 defer 该属性表明脚本在执行期间不会影响到页面的构造,脚本会先下载但被延迟到整个页面都解析完毕后再运行.只适用于外部脚本 <script src="j ...
- js 时间转字符串,转成yyyy-MM-dd HH:mm:SS格式
// 时间转字符串,转成yyyy-MM-dd HH:mm:SS格式 function dateToStr(datetime){ var dateTime = new Date(datetime); v ...
- Cas 服务器 使用HTTP协议对外服务
在上篇博文<Cas 服务器 下载.编译及部署>Cas启动后默认支持HTTPS连接,如果要使用使用HTTP连接访问,则会收到以下信息: 注:本文是将Cas服务器运行在Http协议模式下,非设 ...
- Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)
1 非抢占式和可抢占式内核 为了简化问题,我使用嵌入式实时系统uC/OS作为例子 首先要指出的是,uC/OS只有内核态,没有用户态,这和Linux不一样 多任务系统中, 内核负责管理各个任务, 或者说 ...
- [Hive_add_11] Hive 使用 UDTF 实现日志降维
0. 说明 对日志进行降维处理,将日志分为几个小表 通过编写 UDTF ,对日志降维,将日志聚合体相关字段抽取出来,形成新表. 1. 操作流程 1.0 日志部分内容 ##{\"appChan ...
- #007 C语言大作业学生管理系统第四天
第四天还差恢复已删除学生功能 对于我来说,已经开始很复杂了. 小细节太重要了,边写边出错 1 #include<stdio.h> #include<stdlib.h> #inc ...