zoukankan      html  css  js  c++  java
  • 离散事件模拟-银行管理

    离散事件模拟-银行管理

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

     

    现在银行已经很普遍,每个人总会去银行办理业务,一个好的银行是要考虑 平均逗留时间的,即: 在一定时间段内所有办理业务的人员逗留的时间的和/ 总的人数。逗留时间定义为 人员离开的时间减去人员来的时间。银行只有考虑了这一点,我们在办理业务的时候,才不会等太多的时间。

    为了简化问题,我们认为银行只有一号窗口和二号窗口可以办理业务 ,并且在时间范围是12<=time<=18,即从中午十二点到晚上十八点,输入数据采用分钟即0代表中午12点,60代表下午一点,90代表下午一点半… 这样time>=0&&time<=360, 如果超出这个时间段概不接受,在这个时间段的一律接受。每个人到达的时间都不一样。顾客到达的时候,总是前往人数少的那个窗口。如果办业务的两个人进入离去发生在同一时间,则遵从先离去后进入。如果人数相当或者两个窗口都没有人总是前往1号窗口。请计算平均逗留时间=总逗留的分钟数/总的人数。

    输入

     

    第一行一个整数t(0<t<=100), 代表输入的组数

    对于每一组输入一个整数n(0<n<=100),代表有n个人。然后是n行,每行有两个数据 x 与 y。 x代表顾客到达时间,y代表该顾客逗留时间。x y为整数(0=<x<=360)(y>0&&y<=15)。数据保证按顾客来的先后顺序输入。

    输出

     

    对于每组数据输出平均逗留时间,保留两位小数。

    示例输入

    1
    1
    60 10

    示例输出

    10.00
    


    这题不算是难,结果我却错了好多次,原因苦不堪言,我会在代码中标出来,希望大家不要犯一样的错误。

    这是一个明显的队列的应用题


     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <algorithm>
     4 #include <queue>
     5 using namespace std;
     6 int main()
     7 {
     8     int h,m,n,a,b,last1,last2;
     9     /*last用来标记每个队伍最后一名离开的时间
    10     a,b分别为进入和离开时间*/
    11     double alltime;
    12     scanf("%d",&n);
    13     while(n--)
    14     {
    15         alltime=last1=last2=0;//初始化
    16         scanf("%d",&m);
    17         h=m;
    18         queue<int>p1;
    19         queue<int>p2;
    20         /*让我苦不堪言的就在这,
    21         一定要放对位置,放这里每组数据重新申请空间,
    22         避免了清理内存空间的麻烦*/
    23         while(m--)
    24         {
    25 
    26             scanf("%d %d",&a,&b);
    27             while(!p1.empty()&&p1.front()<=a)//判断是否有人要离开队伍
    28                 p1.pop();
    29             while(!p2.empty()&&p2.front()<=a)
    30                 p2.pop();
    31             if(p1.size()<=p2.size())//判断进入哪个队列
    32             {
    33                 if(a<last1)
    34                     b+=last1;//这个是为了把时间转换成离开时间
    35                 else
    36                     b+=a;
    37                 alltime+=(b-a);
    38                 last1=b;
    39                 p1.push(b);
    40             }
    41             else
    42             {
    43                 if(a<last2)
    44                     b+=last2;
    45                 else
    46                     b+=a;
    47                 alltime+=(b-a);
    48                 last2=b;
    49                 p2.push(b);
    50             }
    51         }
    52         printf("%.2lf
    ",1.0*alltime/h);
    53     }
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    MKMapVIew学习系列2 在地图上绘制出你运行的轨迹
    WPF SDK研究 Intro(6) WordGame1
    WPF SDK研究 Intro(3) QuickStart3
    WPF SDK研究 Layout(1) Grid
    WPF SDK研究 目录 前言
    WPF SDK研究 Intro(7) WordGame2
    WPF SDK研究 Layout(2) GridComplex
    对vs2005创建的WPF模板分析
    WPF SDK研究 Intro(4) QuickStart4
    《Programming WPF》翻译 第6章 资源
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3225555.html
Copyright © 2011-2022 走看看