#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<bits/stdc++.h>
using namespace std;
typedef struct MyStruct
{
char name[8];
int hh;
int mm;
int ss;
bool isIn;
}Car;
bool cmp1(Car c1, Car c2)
{
float t=strcmp(c1.name, c2.name);
if (t != 0)
return t<0;
if (c1.hh != c2.hh)
return c1.hh < c2.hh;
else if (c1.mm != c2.mm)
return c1.mm < c2.mm;
else
return c1.ss < c2.ss;
}
bool cmp3(Car c1, Car c2)
{
if (c1.hh != c2.hh)
return c1.hh < c2.hh;
else if (c1.mm != c2.mm)
return c1.mm < c2.mm;
else
return c1.ss < c2.ss;
}
bool cmp2(string a,string b)
{
return a > b;
}
typedef struct mystr
{
int hh;
int mm;
int ss;
}Date;
Date getDateDis(Date d1, Date d2)
{
Date ans;
if (d1.ss > d2.ss)
{
ans.ss = d1.ss - d2.ss;
}
else {
ans.ss = d1.ss +60- d2.ss;
d1.mm--;
}
if (d1.mm > d2.mm)
{
ans.mm = d1.mm - d2.mm;
}
else {
ans.mm = d1.mm + 60 - d2.mm;
d1.hh--;
}
ans.hh = d1.hh - d2.hh;
return ans;
}
bool isD1bigger(Date d1, Date d2)
{
if (d1.hh != d2.hh)
{
return d1.hh > d2.hh;
}
else if (d1.mm != d2.mm)
return d1.mm > d2.mm;
else
return d1.ss > d2.ss;
}
int switchTime(int hh, int mm, int ss)
{
return hh * 3600 + mm * 60 + ss;
}
int main()
{
int N,M;
vector<Car>allcars,validcars;
scanf("%d %d", &N,&M);
int temp = N;
while (temp--) {
Car car;
scanf("%s %d:%d:%d", &car.name, &car.hh, &car.mm, &car.ss);
char str[5];
scanf("%s", str);
char str1[5] = "in";
if (strcmp(str, str1)==0)
{
car.isIn = true;
}
else {
car.isIn = false;
}
allcars.push_back(car);
}
sort(allcars.begin(),allcars.end(),cmp1);
map<string, int> CDmap;
Car parkCars;
int current=1, last=0;
//bool lastisout=cars[last].isIn;
while (current < allcars.size())
{
if (allcars[last].isIn && !allcars[current].isIn&&strcmp(allcars[last].name, allcars[current].name) == 0)
{
validcars.push_back(allcars[last]);
validcars.push_back(allcars[current]);
/*Date d1, d2;
d1.hh = allcars[current].hh;
d1.mm = allcars[current].mm;
d1.ss = allcars[current].ss;
d2.hh = allcars[last].hh;
d2.mm = allcars[last].mm;
d2.ss = allcars[last].ss;
Date dis = getDateDis(d1, d2);
int t=switchTime(dis.hh,dis.mm,dis.ss);*/
int d1= switchTime(allcars[current].hh, allcars[current].mm, allcars[current].ss);
int d2= switchTime(allcars[last].hh, allcars[last].mm, allcars[last].ss);
int t = d1 - d2;
//map<string, int>::iterator it = CDmap.find(string(allcars[current].name));
if (CDmap.count(allcars[current].name) == 0)
{
CDmap[string(allcars[current].name)] = 0;
}
CDmap[string(allcars[current].name)] += t;
}
current++;
last++;
}
sort(validcars.begin(), validcars.end(), cmp3);
while (M--)
{
Date d;
scanf("%d:%d:%d", &d.hh, &d.mm, &d.ss);
int dt = switchTime(d.hh, d.mm, d.ss);
int cnt = 0;
for (int i = 0; i < validcars.size(); i++)
{
Date cd;
cd.hh = validcars[i].hh;
cd.mm = validcars[i].mm;
cd.ss = validcars[i].ss;
int cdt = switchTime(validcars[i].hh, validcars[i].mm, validcars[i].ss);
//if (!isD1bigger(cd, d))
if (cdt<=dt)
{
if (validcars[i].isIn)
{
cnt++;
}
else {
cnt--;
}
}
}
printf("%d\n", cnt);
}
vector<string> names;
Date bigDatest;
bigDatest.hh = 0;
bigDatest.mm = 0;
bigDatest.ss = 0;
int maxx = 0;
for (map<string, int>::iterator it = CDmap.begin(); it != CDmap.end(); it++)
{
if (it->second> maxx)
{
maxx = it->second;
}
}
for (map<string, int>::iterator it = CDmap.begin(); it != CDmap.end(); it++)
{
if (it->second==maxx)
{
names.push_back(it->first);
}
}
sort(names.begin(), names.end(), cmp2);
for (int i = 0; i < names.size(); i++)
{
if (i > 0)
printf(" ");
printf("%s", names[i].c_str());
}
printf(" %02d:%02d:%02d", maxx/3600, maxx%3600/60, maxx %60);
return 0;
}
0 5原因
bool cmp2(string a,string b)
{
return a > b;
}
1.害怕直接a>b出问题
每次就直接用这个 ,保证头文件
#include<cstdio>
#include<bits/stdc++.h>
就行
2.根本没仔细对测试案例
超时原因
没用这个条件
while (M--)
{
Date d;
scanf("%d:%d:%d", &d.hh, &d.mm, &d.ss);
int dt = switchTime(d.hh, d.mm, d.ss);
int cnt = 0;
for (int i = 0; i < validcars.size(); i++)
{
Date cd;
cd.hh = validcars[i].hh;
cd.mm = validcars[i].mm;
cd.ss = validcars[i].ss;
int cdt = switchTime(validcars[i].hh, validcars[i].mm, validcars[i].ss);
//if (!isD1bigger(cd, d))
if (cdt<=dt)
{
if (validcars[i].isIn)
{
cnt++;
}
else {
cnt--;
}
}
}
printf("%d\n", cnt);
}