A1095 Cars on Campus(模拟停车场)

原题地址:https://pintia.cn/problem-sets/994805342720868352/problems/994805371602845696
参考代码:https://www.liuchuo.net/archives/2951

这道题我开始想了很久,比如如何构造时间加减函数,把车牌号与某一个散列值对应。
后来看了别人的代码:
把所有时间变成秒;
两次排序,第一次对车牌排序,去除无效的记录;
第二次对时间排序,按次序遍历即可获得每个Query的车辆数。用flag=±1即可计算每段时间的车辆数。

注意可能有的车多次进出,计算最长停车时间时要累计。

下面是我的代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

/*
A1095 Cars on Campus
这道题我开始想了很久,比如如何构造时间加减函数,把车牌号与某一个散列值对应。
后来看了别人的代码:
	把所有时间变成秒;
	两次排序,第一次对车牌排序,去除无效的记录;
	第二次对时间排序,按次序遍历即可获得每个Query的车辆数。用flag=+-1即可计算每段时间的车辆数
*/

//每条记录
struct node {
   
	string name = "";
	int flag;
	int time;
};
//每辆车
struct node1
{
   
	string name = "";
	int Ptime;
};

bool cmp1(node a, node b) {
   
	if (a.name != b.name)
		return a.name < b.name;
	else
		return a.time < b.time;
}
bool cmp2(node a, node b) {
   
	return a.time < b.time;
}

int main() {
   
	//----------Input-----------
	//N  the number of records, and K the number of queries
	int N, K;
	scanf("%d %d", &N, &K);
	vector<node> ini_seq(N),seq;
	string num,status;
	for (int i = 0; i < N; i++) {
   
		int h, m, s,time;
		cin >> num;
		scanf("%d:%d:%d", &h, &m, &s);
		cin >> status;
		time = h * 3600 + m * 60 + s;
		ini_seq[i].name = num;
		ini_seq[i].time = time;
		ini_seq[i].flag = status == "in" ? 1 : -1;

	}

	//-----------Remove invalid records-------------
	sort(ini_seq.begin(), ini_seq.end(), cmp1);
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值