PAT甲级1095. Cars on Campus

题意:

浙江大学有6个校区和很多门。从每个门口,我们可以收集穿过大门的汽车的进/出时间和车牌号码。现在有了所有的信息,你应该在任何特定的时间点告诉在校园停车的数量,

在一天结束时,发现停车时间最长的汽车。

输入规格:

每个输入文件包含一个测试用例。每个案例从两个正整数N(<= 10000)开始,记录数,K(<= 80000)查询次数。然后按N行,每个都以格式记录

plate_number hh:mm:ss status

其中plate_number是7个英文大写字母或1位数字的字符串; hh:mm:ss表示一天中的时间点:分钟:秒,最早的时间为00:00:00,最晚为23:59:59;并且状态是进出。

请注意,所有时间都将在一天之内。

每个“in”记录与同一辆车的时间顺序的下一个记录配对,只要它是一个“出”记录。与“out”记录不配对的任何“in”记录都将被忽略,“out”记录也不与“in”记录配对。保证在输入中至少有一辆汽车配对良好,

没有车在同一时刻都在“进”和“出”。使用24小时制记录时间。

然后,K行的查询跟随,每个给出一个格式为hh:mm:ss的时间点。注意:查询按照时间顺序给出。

输出规格:

对于每个查询,输出一行在校园内停车总数。

输出的最后一行应该是给出停留时间最长的车辆的牌号和相应的时间长度。如果这样的车不是唯一的,那么按字母顺序输出所有的牌号,并以空格分隔。

思路:

模拟题还是恶心人呀。

本题中查询数据量特别大,所以查询一定要处理好。 由于是升序,所以可用用一个数组count_time[24 * 60 * 60]模拟,找出valid的数据在start++;在end--;就ok了

ac代码:

C++

// pat1095.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<stdio.h>
#include<map>
#include<cmath>
#include<unordered_map>
#include<unordered_set> using namespace std; int n, k; int all_time_state[86401]; struct records
{
//char plate[8];
string plate;
int state; //1 : in 0 : out
int time;
}; struct car
{
string plate;
//vector<pair<int, int> > time;
int state = 0;
int state_time = 0;
int total = 0;
}; unordered_map<string, car> mymap; int time_to_int(char* temptime)
{
int hour, minute, second;
hour = (temptime[0] - '0') * 10 + (temptime[1] - '0');
minute = (temptime[3] - '0') * 10 + (temptime[4] - '0');
second = (temptime[6] - '0') * 10 + (temptime[7] - '0');
return hour * 3600 + minute * 60 + second;
} bool recmp(records& a, records& b)
{
return a.time < b.time;
} bool staycmp(string& a, string& b)
{
return a < b;
} void wash_data(vector<records>& re) //去除噪声数据
{
sort(re.begin(), re.end(), recmp);
vector<records> res;
for (int i = 0; i < n; i++)
{
if (mymap.find(re[i].plate) == mymap.end())
{
mymap[re[i].plate].state = re[i].state;
mymap[re[i].plate].state_time = re[i].time;
}
else
{
if (mymap[re[i].plate].state == 1 && re[i].state == 0)
{ mymap[re[i].plate].plate = re[i].plate;
all_time_state[mymap[re[i].plate].state_time]++;
all_time_state[re[i].time]--;
//for (int j = mymap[re[i].plate].state_time; j < re[i].time; j++)
//{
// all_time_state[j]++;
//}
//mymap[re[i].plate].time.push_back(make_pair(mymap[re[i].plate].state_time, re[i].time));
mymap[re[i].plate].total += re[i].time - mymap[re[i].plate].state_time; }
mymap[re[i].plate].state = re[i].state;
mymap[re[i].plate].state_time = re[i].time;
}
}
} int main()
{
scanf("%d %d", &n, &k); char tempplate[8], temptime[9], tempstate[4];
vector<records> re;
for (int i = 0; i < n; i++) //input records
{
records r;
scanf("%s %s %s", &tempplate, &temptime, &tempstate);
r.plate = string(tempplate);
r.time = time_to_int(temptime);
if (tempstate[0] == 'i') r.state = 1;
else r.state = 0;
re.push_back(r);
} //wash data
memset(all_time_state, 0, sizeof(all_time_state));
wash_data(re); //handle
int query_time,last_query = 0, carcnt = 0;
for (int i = 0; i < k; i++)
{
scanf("%s", temptime);
query_time = time_to_int(temptime);
while (last_query <= query_time) carcnt += all_time_state[last_query++];
printf("%d\n", carcnt);
} vector<string> longstay;
int long_stay_time = -1;
for (auto it = mymap.begin(); it != mymap.end(); it++)
{
if (it->second.total > long_stay_time)
{
long_stay_time = it->second.total;
longstay.clear();
longstay.push_back(it->first);
}
else if(it->second.total == long_stay_time)
{
longstay.push_back(it->first);
}
} sort(longstay.begin(), longstay.end(), staycmp);
for (int i = 0; i < longstay.size(); i++)
{
cout << longstay[i] << " ";
}
printf("%02d:%02d:%02d\n", long_stay_time / 3600, (long_stay_time % 3600) / 60, long_stay_time % 60);
return 0;
}

PAT甲级1095. Cars on Campus的更多相关文章

  1. PAT甲级——1095 Cars on Campus (排序、映射、字符串操作、题意理解)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/93135047 1095 Cars on Campus (30 分 ...

  2. PAT甲级——A1095 Cars on Campus

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

  3. 1095 Cars on Campus——PAT甲级真题

    1095 Cars on Campus Zhejiang University has 6 campuses and a lot of gates. From each gate we can col ...

  4. PAT 1095 Cars on Campus

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

  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甲级】1095 Cars on Campus (30 分)

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

  7. PAT (Advanced Level) Practise - 1095. Cars on Campus (30)

    http://www.patest.cn/contests/pat-a-practise/1095 Zhejiang University has 6 campuses and a lot of ga ...

  8. PAT (Advanced Level) 1095. Cars on Campus (30)

    模拟题.仔细一些即可. #include<cstdio> #include<cstring> #include<cmath> #include<algorit ...

  9. PAT甲题题解-1095. Cars on Campus(30)-(map+树状数组,或者模拟)

    题意:给出n个车辆进出校园的记录,以及k个时间点,让你回答每个时间点校园内的车辆数,最后输出在校园内停留的总时间最长的车牌号和停留时间,如果不止一个,车牌号按字典序输出. 几个注意点: 1.如果一个车 ...

随机推荐

  1. Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: 代码如下: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的sour ...

  2. 判断Selenium加载完成

    How do you make Selenium 2.0 wait for the page to load? You can also check pageloaded using followin ...

  3. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  4. Linux下不能挂载NTFS格式硬盘/U盘

    如果大家以后在Ubuntu系统下面遇到NTFS格式的移动硬盘哪个分区不能挂载的话,可以尝试sudo ntfsfix /dev/你相应的分区

  5. Mathtype公式位置偏上

    Mathtype公式位置偏上 部分Mathtype公式与文档文字没有很好的对齐,而是浮起来了,也就是说Mathtype公式的位置比正常文字稍高,这是我写论文时碰到的一个很麻烦的问题.然后就是行距稍微大 ...

  6. Bootstrap的使用。。。

    概览 深入了解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快.更强壮的最佳实践. HTML5 文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属 ...

  7. 创建 dblink

    目的:oracle中跨数据库查询       两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据解决:查询 ...

  8. 洛谷 P2036 Perket 题解

    题目传送门 这道题可以使用dfs深搜实现,在每次递归深搜时要更新ans. #include<bits/stdc++.h> using namespace std; ,s=,b; ]; st ...

  9. Cookie/Session的认识

    Cookie 1.cookie是什么? cookie是一小段文本,伴随着用户请求和页面在web服务器和浏览器之间传递,cookie包含每次用户访问站点时,web应用程序都可以读取的信息 2.为什么需要 ...

  10. char *s 和char s[]的区别

    char *s 和 char s[] 的区别小结 博客分类: C语言 c教育 . 最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区( ...