Advertisement
Mysakure

Untitled

Feb 21st, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. /**
  2.  *     author:  MySakure
  3.  *     created: 21.02.2020 19:44:35          
  4. **/
  5. #include<bits/stdc++.h>
  6. using namespace std;
  7. #define all(a) a.begin(),a.end()
  8.  
  9. const int maxn=1e5+10;
  10. struct bus{
  11.     string name,time;
  12.     int res=0,t;
  13. }a[maxn];
  14. int k,n;
  15. int check(string time){
  16.     int ans=0;
  17.     ans+=((time[0]-'0')*10+time[1]-'0')*60*60;
  18.     ans+=((time[3]-'0')*10+time[4]-'0')*60;
  19.     ans+=((time[6]-'0')*10+time[7]-'0');
  20.     return ans;
  21. }
  22. bool cmp(const bus&a,const bus&b){
  23.     return a.t<b.t;
  24. }
  25. void print(int res){
  26.     int t=res/60/60;
  27.     if(t<=9)cout<<"0"<<t<<":";
  28.     else cout<<t<<":";
  29.     t=res/60%60;
  30.     if(t<=9)cout<<"0"<<t<<":";
  31.     else cout<<t<<":";
  32.     t=res%60;
  33.     if(t<=9)cout<<"0"<<t<<endl;
  34.     else cout<<t<<endl;
  35. }      
  36. struct query{
  37.     int id;
  38.     string time;
  39.     int t;
  40. }q[maxn];
  41. bool cmp2(const query&a,const query&b){
  42.     return a.t<b.t;
  43. }
  44. int ans[maxn];
  45. map<string,int>mp;
  46. int pos=0;
  47. vector<int>v[maxn];
  48. bool cmp3(int lhs,int rhs){
  49.     return a[lhs].t<a[rhs].t;
  50. }
  51. struct p{
  52.     string name;
  53.     int t;
  54. }Ans[maxn];
  55. int idans;
  56. bool cmp4(const p&a,const p&b){
  57.     return a.t>b.t;
  58. }
  59. signed main() {
  60.     ios::sync_with_stdio(false);
  61.     cin.tie(NULL);
  62.     cin>>n>>k;
  63.     for(int i=1;i<=n;++i){
  64.         cin>>a[i].name>>a[i].time;
  65.         string tmp;
  66.         cin>>tmp;
  67.         if(tmp=="in")a[i].res=1;
  68.         else a[i].res=-1;
  69.         a[i].t=check(a[i].time);
  70.         if(!mp.count(a[i].name))mp[a[i].name]=++pos;
  71.         v[mp[a[i].name]].push_back(i);
  72.     }
  73.     for(int i=1;i<=pos;++i){
  74.         sort(v[i].begin(),v[i].end(),cmp3);
  75.         for(int j=0;j<int(v[i].size());++j){
  76.             if(a[v[i][j]].res==1&&j<(int(v[i].size())-1)&&a[v[i][j+1]].res==-1){
  77.                 if(Ans[idans].name==a[v[i][j]].name)
  78.                     Ans[idans].t+=a[v[i][j+1]].t-a[v[i][j]].t;
  79.                 else
  80.                     Ans[++idans]=p{a[v[i][j]].name,a[v[i][j+1]].t-a[v[i][j]].t};
  81.                 ++j;
  82.             }
  83.             else a[v[i][j]].res=0;
  84.         }
  85.     }
  86.            
  87.     sort(a+1,a+1+n,cmp);
  88.     for(int i=1;i<=k;++i){
  89.         cin>>q[i].time;
  90.         q[i].t=check(q[i].time);
  91.         q[i].id=i;
  92.     }
  93.     sort(q+1,q+1+k,cmp2);
  94.     int id=1,cnt=0;
  95.     for(int i=1;i<=k;++i){
  96.         while(id<=n&&a[id].t<=q[i].t){
  97.             cnt+=a[id].res;
  98.             ++id;
  99.         }
  100.         ans[q[i].id]=cnt;
  101.     }
  102.     for(int i=1;i<=k;++i)
  103.         cout<<ans[i]<<endl;
  104.     sort(Ans+1,Ans+1+idans,cmp4);
  105.     if(idans==0){
  106.         return 0;
  107.     }
  108.     int tmp=1;
  109.     while(tmp+1<=idans&&Ans[tmp+1].t==Ans[tmp].t){
  110.         ++tmp;
  111.     }
  112.     for(int i=1;i<=tmp;++i){
  113.         cout<<Ans[i].name<<" ";
  114.     }
  115.     print(Ans[1].t);
  116.     return 0;
  117. }
  118. /*
  119.  JH007BD 18:00:01 in
  120.  JH007BD 05:09:59 in
  121.  JH007BD 05:10:33 in
  122.  JH007BD 12:23:42 out
  123.  JH007BD 12:24:23 out
  124.  JH007BD 18:07:01 out
  125.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement