PAT (Advanced Level) Practice 1095 Cars on Campus 段错误的处理

一、概述

根据一天中不同时刻车辆的进出情况,输出某时刻校园内的车辆总数和在一天中在校园内呆的时间最长的车辆。

本题实际上是两道题的集合,与之前的电话费题目类似,都是要先找出合法配对再往下做。

小的坑很多,要注意。

二、分析

首先要明确一点,将时间全化为秒会好做很多,不然时分秒比较谁先谁后逻辑太麻烦了。另外本题对于运行时间较敏感,姥姥可能真拿了八万条数据来测试也说不好,少用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 &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值