#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
struct record
{
char id[10];
int time;
bool s;//in/out
}rec[10010], valid[10010];
map<string, int> parktime;//车牌号-总停留时间
bool cmp(record a, record b)
{
if (strcmp(a.id, b.id) != 0) return strcmp(a.id, b.id) < 0;
else return a.time < b.time;
}
bool cmpt(record a, record b)
{
return a.time < b.time;
}
int time(int hh, int mm, int ss)//化为秒计算时间的函数
{
return hh * 3600 + mm * 60 + ss;
}
int main()
{
int n, k;//n-records k-queries
scanf("%d %d", &n, &k);
char temp[20];
int hh, mm, ss;
for (int i = 0; i < n; i++)//input records
{
scanf("%s", rec[i].id);
scanf("%d:%d:%d", &hh, &mm, &ss);
scanf("%s", temp);
rec[i].time = time(hh, mm, ss);
if (strcmp(temp, "in") == 0) rec[i].s = 1;//in时为1,out为0
else rec[i].s = 0;
}
sort(rec, rec + n, cmp);//第一次对全体sort 按照车牌号时间sort
//输入完记录 开始整理有效记录
int num = 0;//有效记录的计数
int maxstay = -1;
for (int i = 0; i < n - 1; i++)
{
if (rec[i].s == 1 && rec[i + 1].s == 0 && strcmp(rec[i].id, rec[i + 1].id) == 0)
{
valid[num++] = rec[i];
valid[num++] = rec[i + 1];//最后的num为有效记录数
//处理最长时间问题
int stay = rec[i + 1].time - rec[i].time;//停留时间
if (parktime.count(rec[i].id) == 0) { parktime[rec[i].id] = 0; }//键id第一次出现时候,置零 count为小括号
parktime[rec[i].id] += stay;
maxstay = max(maxstay, parktime[rec[i].id]);
}//if括号的位置,注意小细节
}
sort(valid, valid + num, cmpt);//第二次按照时间先后顺序sort 方便后面按照时间确定进出车数量
//输入query
for (int i = 0; i < k; i++)
{
scanf("%d:%d:%d", &hh, &mm, &ss);
int nowtime = time(hh, mm, ss);
int parknum = 0;
for (int j = 0; j < num&&nowtime >= valid[j].time; j++)
{
if (valid[j].s == 1) parknum++;//当是in时候,停车数加一
else parknum--;
}
printf("%d\n", parknum);
}
//输出停车时间最长的车牌号和时间
map<string, int>::iterator it;
for (it = parktime.begin(); it != parktime.end(); it++)//新学到的map用法
{
if (it->second == maxstay) printf("%s ", it->first.c_str());
//第一次见到.c_str()的用法(注意str后面还有括号) string里面的输出,要在c下输出需要加这个,还可以加iostream的头文件,然后用cout输出
}
printf("%02d:%02d:%02d", maxstay / 3600, maxstay % 3600 / 60, maxstay % 60);
return 0;
}
A1095 Cars on Campus (30 分)
最新推荐文章于 2019-10-09 19:00:55 发布