PAT (Advanced Level) 1017 Queueing at Bank

题解

         模拟。记得把早于8:00达到的人的等待时间加上。

代码

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int time,get_time,p_time;
    node(int c,int a,int b)
    {
        time=c;
        get_time=a;
        p_time=b;
    }
    bool operator <(const node & n) const
    {
        if(get_time!=n.get_time)
            return get_time<n.get_time;
        else
            return time<n.time;
    }
};
vector<node> v;
int limit_up,limit_down,finish[105];
int str_to_sec(string str);
int main()
{
    int i,n,k,p_time,get_time,time,ans=0;
    string str;
    limit_up=str_to_sec("08:00:00");
    limit_down=str_to_sec("17:00:00");
    scanf("%d%d",&n,&k);
    for(i=0;i<n;i++)
    {
        cin>>str>>p_time;
        get_time=time=str_to_sec(str);
        if(time>limit_down) continue;
        else
        {
            if(time<limit_up)
            {
                ans+=(limit_up-time);
                get_time=limit_up;
            }
            v.push_back(node(time,get_time,p_time*60));
        }
    }
    sort(v.begin(),v.end());
    for(i=0;i<v.size();i++)
    {
        sort(finish,finish+k);
        if(v[i].get_time<finish[0])
        {
            ans+=finish[0]-v[i].get_time;
            finish[0]+=v[i].p_time;
        }
        else
        {
            finish[0]=v[i].get_time+v[i].p_time;
        }
    }
    printf("%.1lf",ans/(v.size()*60.0));
    system("pause");
    return 0;
}
int str_to_sec(string str)
{
  int h,m,s;
  h=(str[0]-'0')*10+str[1]-'0';
  m=(str[3]-'0')*10+str[4]-'0';
  s=(str[6]-'0')*10+str[7]-'0';
  return h*3600+m*60+s;
}
posted @ 2020-01-21 14:03  Vivid-BinGo  阅读(148)  评论(0)    收藏  举报