PAT A 1095. Cars on Campus (30)

来源:互联网 发布:星际争霸2战役兵种数据 编辑:程序博客网 时间:2024/05/29 13:34

总有一个超时的。

#include <string>#include <cstdio>#include <iostream>#include <map>#include <vector>#include <algorithm>#include <set>using namespace std;struct inandout{string intime,outtime,parktime;void compute(){string shh(intime,0,2),smm(intime,3,2),sss(intime,6,2);string thh(outtime,0,2),tmm(outtime,3,2),tss(outtime,6,2);int s=stoi(shh)*60*60+stoi(smm)*60+stoi(sss),t=stoi(thh)*60*60+stoi(tmm)*60+stoi(tss);int lag=t-s,tt[3];for(int i=0;i<3;++i){tt[i]=lag%60;lag/=60;}char tmpt[8];sprintf(tmpt,"%02d:%02d:%02d",tt[2],tt[1],tt[0]);parktime.assign(tmpt,tmpt+9);}void in(string &a){intime=a;}void out(string &b){outtime=b;}};struct record{string plate,time,move;bool flag=true;record()=default;record(const string &a,const string &b,const string &c){plate=a,time=b,move=c;}};bool cmp_time(const record &a,const record &b){if(a.time!=b.time)return a.time>b.time;return a.plate<b.plate;}bool cmp_plate(const record &a,const record &b){if(a.plate!=b.plate)return a.plate<b.plate;return a.time<b.time;}vector<record> rec;map<string,string> cars;vector<string> result;set<string> check,parkingcars;void addup(string &intime,const string &outtime){string shh(intime,0,2),smm(intime,3,2),sss(intime,6,2);string thh(outtime,0,2),tmm(outtime,3,2),tss(outtime,6,2);int s=stoi(shh)*60*60+stoi(smm)*60+stoi(sss),t=stoi(thh)*60*60+stoi(tmm)*60+stoi(tss);int lag=t+s,tt[3];for(int i=0;i<3;++i){tt[i]=lag%60;lag/=60;}char tmpt[9];sprintf(tmpt,"%02d:%02d:%02d",tt[2],tt[1],tt[0]);intime.assign(tmpt,tmpt+9);}int main(void){//freopen("in.log","r",stdin);int n,k;string maxtime="00:00:00";scanf("%d%d",&n,&k);while(n--){char p[8],ti[9],mo[4];scanf("%s%s%s",p,ti,mo);string a(p),b(ti),c(mo);record tmpr(a,b,c);rec.push_back(tmpr);}sort(rec.begin(),rec.end(),cmp_plate);for(int i=0;i<rec.size();){if(i+1<rec.size()){if(rec[i].plate==rec[i+1].plate&&rec[i].move=="in"&&rec[i+1].move=="out"){inandout tmp;tmp.in(rec[i].time),tmp.out(rec[i+1].time); tmp.compute();if(!cars.count(rec[i].plate)){cars[rec[i].plate]=tmp.parktime;}else addup(cars[rec[i].plate],tmp.parktime);if(cars[rec[i].plate]>maxtime){result.clear();maxtime=cars[rec[i].plate];result.push_back(rec[i].plate);}else if(cars[rec[i].plate]==maxtime) result.push_back(rec[i].plate);i+=2;}else rec.erase(rec.begin()+i);}else rec.erase(rec.begin()+i);}sort(rec.begin(),rec.end(),cmp_time); int carnum=0,i=rec.size()-1;while(k--){string now;cin>>now;while(i>=0&&rec[i].time<=now){if(rec[i].move=="in"){++carnum;}else if(rec[i].move=="out"){--carnum;}--i;}cout<<carnum<<endl;}sort(result.begin(),result.end());for(string c:result)cout<<c<<" ";cout<<maxtime<<endl;return 0;}

原创粉丝点击