题解
模拟。记得把早于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;
}