利用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;
}