1095 Cars on Campus (30分)

利用map存取车的停车时间:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;

const int maxn = 10010;

int num;
struct Car
{
	char no[10];
	int t;
	char status[5];
}all[maxn],valid[maxn];

int timetos(int a, int b, int c) {
	int s;
	s = a * 3600 + b * 60 + c;
	return s;
}

bool cmp(Car a, Car b) {
	if (strcmp(a.no, b.no))return strcmp(a.no, b.no) < 0;
	else return a.t < b.t;
}

bool cmp2(Car a, Car b) {
	return a.t < b.t;
}

int main() {
	int n, k, h, m, s;
	scanf("%d%d", &n, &k);
	for (int i = 0; i < n; i++)
	{
		scanf("%s%d:%d:%d%s", all[i].no, &h, &m, &s, all[i].status);
		all[i].t = timetos(h, m, s);
	}
	map<string, int> ptime;
	sort(all, all + n, cmp);
	int maxtime = -1;
	for (int i = 0; i < n-1; i++)
	{
		if (!strcmp(all[i].status,"in")&& !strcmp(all[i+1].status, "out")&& !strcmp(all[i].no,all[i+1].no))
		{
			valid[num++] = all[i];
			valid[num++] = all[i + 1];
			int time = all[i + 1].t - all[i].t;
			if (ptime.count(all[i].no)==0)
			{
				ptime[all[i].no] = 0;
			}
			ptime[all[i].no] += time;
			maxtime = max(ptime[all[i].no], maxtime);
		}
	}

	sort(valid, valid + num, cmp2);
	int now=0, carnum=0;
	for (int i = 0; i < k; i++)
	{
		scanf("%d:%d:%d",  &h, &m, &s);
		int t = timetos(h, m, s);
		while (now<num&&valid[now].t<=t) {
			if (!strcmp(valid[now].status, "in"))
			{
				carnum++;
			}
			else carnum--;
			now++;
		}
		printf("%d\n", carnum);
	}
	map<string, int>::iterator it;
	for (it=ptime.begin();it!=ptime.end();it++)
	{
		if (maxtime==it->second)
		{
			printf("%s ", it->first.c_str());
		}
	}
	printf("%02d:%02d:%02d\n", maxtime/3600,maxtime%3600/60,maxtime%60);
	return 0;
}
发布了6 篇原创文章 · 获赞 6 · 访问量 107

猜你喜欢

转载自blog.csdn.net/qq_41148778/article/details/104029876