1095. Cars on Campus (30) 注意題目所給的信息,k個queries是按時間降序給出的,所以我們遍歷時只要對所有記錄按照時間排序,再進行遍歷即可;否則容易超時 注意in和out的配對,本代碼用islegal來核對該條記錄是否正確; 對于最大值對應車牌號的儲存,用string來記錄所有滿足條件的車牌號比較方便; 注意最后時間格式的輸出;
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ char plate[12]; int time; int status; bool islegal;}v[10008];bool sortbyplate(const node &a,const node &b){ if(strcmp(a.plate,b.plate)==0) return a.time<b.time; return strcmp(a.plate,b.plate)<0;}bool sortbytime(const node &a,const node &b){ if(a.islegal==b.islegal) return a.time<b.time; return a.islegal>b.islegal;}void CheckIslegal(struct node v[],int n){ for(int i=0;i<n;++i) { if(i==n-1){ v[i].islegal=false;break; } if(strcmp(v[i].plate,v[i+1].plate)==0) { if(v[i].status&&!v[i+1].status){ v[i].islegal=true; v[i+1].islegal=true;i++; } else v[i].islegal=false; } else v[i].islegal=false; }}int CalMaxtime(struct node v[],int n,string &ans){ int max=-1; for(int i=0;i<n;i++) { if(v[i].islegal&&v[i].status) { int ct=0,j=i; while(j<n&&strcmp(v[i].plate,v[j].plate)==0) { if(v[j].islegal&&v[j].status){ ct+=v[j+1].time-v[j].time; ++j; } ++j; } if(max<ct) { ans.clear(); ans=v[i].plate; max=ct; } else if(max==ct) { ans+=" "; ans+=v[i].plate; } i=j-1; } } return max;}void ReadQuery(struct node v[],int n,int k){ int hh,mm,ss,cur,i=0,cnt=0; while(k--) { scanf("%d:%d:%d",&hh,&mm,&ss); cur=hh*3600+mm*60+ss; while(i<n&&v[i].time<=cur&&v[i].islegal) { if(v[i].status) ++cnt; else --cnt; ++i; }新聞熱點
疑難解答