一、概述
根据一天中不同时刻车辆的进出情况,输出某时刻校园内的车辆总数和在一天中在校园内呆的时间最长的车辆。
本题实际上是两道题的集合,与之前的电话费题目类似,都是要先找出合法配对再往下做。
小的坑很多,要注意。
二、分析
首先要明确一点,将时间全化为秒会好做很多,不然时分秒比较谁先谁后逻辑太麻烦了。另外本题对于运行时间较敏感,姥姥可能真拿了八万条数据来测试也说不好,少用cin和cout。
利用结构体储存出入记录。如下:
struct Car
{
string plate_number;
int time;
int InorOut;
int valid = 0;
}car[10010];
出入记录有合法的,有非法的,对于非法记录,视为无效。那么首先要把有效记录找出来。如果之前做过计算话费的题目,那就简单的多:首先以车牌号为第一优先,时间为第二优先将所有记录进行排序,然后从头开始遍历,找出所有的车牌号相同,且时间相邻,一进一出的记录,这两条都是合法记录,将其valid置为1,这样完成了数据清洗工作。与此同时还可以求出各辆车在学校呆的总时间。如下:
cmp函数
bool cmpcar(Car a, Car b)
{
int s = a.plate_number.compare(b.plate_number);
if (s != 0)
return s < 0;
else
return a.time < b.time;
}
数据清洗
sort(car, car + N, cmpcar);
int sumtime = 0;
for (i = 0; i < N; i++)
{
if (car[i].plate_number.compare(car[i + 1].plate_number) == 0)
{
if (car[i].InorOut == 1 &