首页 > 其他分享 >23-4-14--链表--银行排队问题之单队列多窗口服务

23-4-14--链表--银行排队问题之单队列多窗口服务

时间:2023-04-14 23:00:40浏览次数:44  
标签:窗口 -- 多窗口 链表 int 等待时间 顾客 pl

假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。

本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。

输入格式:

输入第1行给出正整数N(≤1000),为顾客总人数;随后N行,每行给出一位顾客的到达时间T和事务处理时间P,并且假设输入数据已经按到达时间先后排好了顺序;最后一行给出正整数K(≤10),为开设的营业窗口数。这里假设每位顾客事务被处理的最长时间为60分钟。

输出格式:

在第一行中输出平均等待时间(输出到小数点后1位)、最长等待时间、最后完成时间,之间用1个空格分隔,行末不能有多余空格。

在第二行中按编号递增顺序输出每个窗口服务了多少名顾客,数字之间用1个空格分隔,行末不能有多余空格。

输入样例:

9
0 20
1 15
1 61
2 10
10 5
10 3
30 18
31 25
31 2
3
 

输出样例:

6.2 17 61
5 3 1

思路如下:

 

 

 

 

 

 

 

 

 

 

 

 思路借鉴的 csdn 北极光。的,

 

 

 

#include <iostream>
#include <stack>
#include <queue>

using namespace std;
queue <int> tl;
queue <int> pl;




int main()
{
    int n;
    cin>>n;
    
    for(int i=0;i<n;i++)
    {
        int t,p;
        scanf("%d %d",&t,&p);
        pl.push(p);
        tl.push(t);  
    }
    int k;
    cin>>k;
    int sum[15]={0};
    int num[15]={0};
    int maxwait=0,wait=0,sumwait=0;
    while(!pl.empty() )
    {
        int minn=99999,imin=0,flag=0;
        int t=tl.front();
        tl.pop() ;
        int p=pl.front();
        pl.pop() ;
        if(p>60)
        {
            p=60;
        }
        for(int i=1;i<=k;i++)
        {
            if(sum[i]<=t)
            {
                sum[i]=t;
                sum[i]+=p;
                num[i]++;
                flag=1;
                break;
            }
            if(minn>sum[i])
            {
                minn=sum[i];
                imin=i;
            }
        }
        if(!flag)
        {
            wait=minn - t;
            if(maxwait<wait)
            {
                maxwait = wait;
            }
            sumwait +=wait;
            sum[imin]=minn + p;
            num[imin]++;
            
        }
        
    }
    int endtime=0;
    for(int i=1;i<=k;i++)
    {
        if(endtime<sum[i])
        {
            endtime=sum[i];
        }
    }
    printf("%.1f %d %d\n",1.0*sumwait/n,maxwait,endtime);
    
    for(int i=1;i<=k;i++)
    {
        printf("%d",num[i]);
        if(i!=k)
        {
            cout<<' ';
        }
    }
    return 0;
}

 

 

标签:窗口,--,多窗口,链表,int,等待时间,顾客,pl
From: https://www.cnblogs.com/daniel350-wang/p/17320203.html

相关文章

  • c++primer15面向对象程序设计
    除了“构造函数”和“析构函数”,父类的所有成员函数,以及数据成员,都会被子类继承!:补充赋值运算符继承问题(链接) 成员函数如果没被声明为虚函数,其解析过程发生在编译时而非运行时。       派生类引用或者指针向基类引用或者指针自动类型转换:参考能够在一个赋值......
  • 第三章部分例题
    例3-1编写一个求x的n次方的函数分析:用数学函数pow求代码部分:#include<iostream>#include<math.h>usingnamespacestd;intmain(){intk,f,l;cin>>k;cin>>f;l=pow(k,f);cout<<l;return0;}例3-2输入一个8位二进制数,将其转换为......
  • Codeforces Round 628 (Div. 2) A-D
    CodeforcesRound628(Div.2)A.EhAbAnDgCdvoidsolve(){intn=read();for(inti=1;i*i<=n;i++){intg=__gcd(i,n-i);if(g*g+i*(n-i)==n*g){cout<<i<<""<<n-i<<endl;bre......
  • python_一切皆是对象
    minicondapython中的对象的三个基本特征查看idtype()查看类型,print()查看值python和java面相对象的区别函数和类的对象特性装饰器用到了那个特性python中函数也可以当做返回值函数赋值给另外一个变量类赋值给另外一个变量将函数,类添加到一个列表中可以将......
  • 3
    #include<stdio.h>typedefstructdata{intyear;//年intmonth;//月intday;//日}Data;intLeapYear(intyear)//判断这一年是不是闰年{if((year%4==0&&year%100!=0)||year%400==0)return1;return0;};intdays[2][13]={{0,31,2......
  • 如何创立一家人工智能创业公司
    许多专家认为,人工智能是世界的未来。随着人工智能聊天机器人、语音助理和无人驾驶汽车的兴起,这很难说。既然你有机会利用这个新时代的技术,你该如何开始呢?乍一看,这似乎是一项艰巨的任务,但别担心,我们会支持你的。本文提供了一些启动人工智能初创企业的最简便的技巧。中小企业最......
  • 23-04-13
    #A.最大子段和最大子段和(正常)for(inti=1;i<=n;i++)sum[i]=max(sum[i-1]+in[i],in[i]);\(sum[i]\)表示以第i个数为结尾的最大子段和,可以由前一个最大子段和转移过来\((sum[i-1]+in[i])\),也可以只包含自己\((in[i])\);本题用\(fr[i]\)表示以前i个数的最大子段和,\(......
  • 模板元编程与函数式
    参考:【公开课】现代C++进阶:模板元编程与函数式ppt和代码在高性能计算中,一般使用函数式和元编程,而不使用面向对象。简单的介绍:类型自动推导模板参数、模板特化简单的实例:#include<iostream>template<classT>Ttwice(Tt){returnt*2;}std::stringtwice(std::......
  • ecode custom config
    colorschemes.conf[mathtimes]background=#272b2ftext=#D4D4D4caret=#FFFFFFaccent=#76BCFFselection=#3465a4line_number=#909090line_number2=#C0C0C0line_highlight=#3a4046suggestion=#e1e1e6,#1d1f27suggestion_selected=#ffffff,#22253......
  • 在markdown中,如何使用html代码将多行的代码块插入到一行文字中
    这是一行文字,其中包含了一段多行的代码块:<codestyle="display:inline-block;">intmain(){printf("Hello,world!");return0;}</code>文字继续向下。效果如下:这是一行文字,其中包含了一段多行的代码块:intmain(){printf("Hello,world!");return0;}文字继续......