#include
#include
#include
using namespace std;
struct Node{
int t; //到达时间
int p; //业务办理时间
};
int main()
{
queue q;
int N;
cin>>N;
int i;
for(i=0;i
{
Node temp;
cin>>temp.t>>temp.p;
if(temp.p>60)
temp.p=60;
q.push(temp);
}
int K;
cin>>K;
int wait=0,tmax=0,sum=0; //等待时间wait,等待最长时间tmax,总等待时间sum
int win[80]={0},num[80]={0}; //每个窗口的等待时间win,办理业务人数num
while(!q.empty()) //遍历队列q(三次一循环)
{
int flag=0,tmin=1000000,imin=0; //最小等待时间tmin,最小下标i
for(i=0;i
{
if(win[i]<=q.front().t) //排序顾客到达时间
{
win[i]=q.front().t+q.front().p; //当前窗口的事物办理时间
num[i]++; //人数加一
q.pop(); //出队
flag=1;
break;
}
if(tmin>win[i])
{
tmin=win[i]; //交换值
imin=i; //记录当前下标
}
}
if(flag==0) //
{
wait=win[imin]-q.front().t; //当前窗口的等待时间
win[imin]+=q.front().p; //这里的win[imin]加p而不是加wait
if(tmax
tmax=wait; //所有中的最长等待时间
sum+=wait;//求总等待时间
num[imin]++; //求每个窗口的人数
q.pop();
}
}
int len=win[0]; //最后完成时间
for(i=0;i
{
if(len
len=win[i];
}
printf("%.1f %d %d\n",sum*1.0/N,tmax,len);
for(i=0;i
{
cout<
if(i!=K-1)
cout<
else
cout<
}
return 0;
}
一键复制
编辑
Web IDE
原始数据
按行查看
历史