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 ...
随机推荐
- JS之console.log详解以及兄弟姐们邻居方法扩展
console.log() 基本用法 console.log,前端常用它来调试分析代码,你可以在任何的js代码中调用console.log(),然后你就可以在浏览器控制台看到你刚才打印的常量,变量,数 ...
- 2018-12-16 VS Code英汉词典进化效果演示: 翻译文件所有命名
续VS Code英汉词典插件v0.0.7-尝试词性搭配, 下一个功能打算实现文件的批量命名翻译: 批量代码汉化工具 · Issue #86 · program-in-chinese/overview ...
- 【代码笔记】Web-JavaScript-JavaScript错误
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- leaflet 如何绘制圆
方法1(根据指定的半径和中心点去绘制圆) var polygon1 = new L.Circle([34, 108], 120000, { color: 'red', //颜色 fillColor: ...
- error 2593 operator << 不明确的可能的解决方法
编译Martinez算法时遇到该问题,提示重载的<<操作符调用不明确. 解决方法为:在cpp文件中将重载的该操作符的实现前添加完整的命名空间路径.
- Android使用Glide加载https链接的图片不显示的原因
平时我们使用Glide加载http网址的图片的时候,图片可以正常加载出来,但是如果服务器端加上了安全认证,当加载自签名的https图片的时候就会报如下错误(证书路径验证异常). 我们如果不修改Glid ...
- C#“必须先将当前线程设置为单个线程单元(STA)模式方可进行OLE调用”异常解决方案
关于这类问题网上搜索会有很多解决方案,但基本的意思都相差不大,大致问题出于启用线程时调用类似剪贴板Clipboard.SetDataObject出错,我把我的测试代码展现下: 解决方案:只需将thre ...
- 《高性能JavaScript》--读书笔记
第一章 加载和运行 延迟脚本 defer 该属性表明脚本在执行期间不会影响到页面的构造,脚本会先下载但被延迟到整个页面都解析完毕后再运行.只适用于外部脚本 <script src="j ...
- Oracle根据已有表的数据建立新表
需要保证create的表内的字段与select的表一致. create table 表名(字段名,字段名,字段名,字段名,字段名,字段名) as select * from 表名
- Spring MVC 全注解配置 (十一)
完整的项目案例: springmvc.zip 目录 实例 项目结构: 父级的pom配置: <?xml version="1.0" encoding="UTF-8&q ...