有一个case超时
#include<cstdio>
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
map <string , int > c2id;
map <int , string > id2c;
struct node
{
int time,in_out,id;
node(int a,int b,int c):time(a),in_out(b),id(c){}
};
struct park
{
int stime,etime;
park(int _s,int _e):stime(_s),etime(_e){}
};
int tran(string time)
{
int x=0;
x+=(time[0]-'0')*60*60*10;
x+=(time[1]-'0')*60*60;
x+=(time[3]-'0')*60*10;
x+=(time[4]-'0')*60;
x+=(time[6]-'0')*10;
x+=(time[7]-'0');
return x;
}
bool cmp(node a,node b)
{
if(a.id!=b.id)
return a.id<b.id;
else if(a.time!=b.time)
return a.time<b.time;
return a.in_out<b.in_out;
}
int main()
{
int n,m,time,id;
string sid,stime,op;
cin>>n>>m;
vector <node> record;
int ans=0;
for(int i=0;i<n;i++)
{
cin>>sid>>stime>>op;
if(c2id[sid]==0)
c2id[sid]=++ans,id2c[ans]=sid;
id=c2id[sid];
time=tran(stime);
if(op=="in")
record.push_back(node(time,0,id));
else
record.push_back(node(time,1,id));
}
sort(record.begin(),record.end(),cmp);
vector <park> res;
vector <string > maxtimecar;
vector <int > parktime(ans+1);
int maxtime=0;
for(int i=0;i<record.size()-1;i++)
{
if(record[i].in_out==0&&record[i+1].id==record[i].id)
{
if(record[i+1].in_out==0)
continue;
else
{
parktime[record[i].id]+=record[i+1].time-record[i].time;
if(parktime[record[i].id]>maxtime)
{
maxtime=parktime[record[i].id];
maxtimecar.clear();
maxtimecar.push_back(id2c[record[i].id]);
}
else if(parktime[record[i].id]==maxtime)
maxtimecar.push_back(id2c[record[i].id]);
res.push_back(park(record[i].time,record[i+1].time));
}
}
}
string rstime;
int rtime;
for(int i=0;i<m;i++)
{
cin>>rstime;
rtime=tran(rstime);
int tmp=0;
for(int j=0;j<res.size();j++)
{
if(rtime>=res[j].stime&&rtime<res[j].etime)
tmp++;
}
cout<<tmp<<endl;
}
sort(maxtimecar.begin(),maxtimecar.end());
for(int i=0;i<maxtimecar.size();i++)
cout<<maxtimecar[i]<<' ';
printf("%02d:%02d:%02d\n",maxtime/3600,(maxtime%3600)/60,maxtime%60);
return 0;
}