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

    呃,这个题,我只想仰天长啸:无语死我了,还动用了繁和帅锅给我改,妹的,做题一定要仔细仔细再仔细啊,这种小错误都犯真是该打。

    题目描述

     

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

    为了简化问题,我们认为银行只有一号窗口和二号窗口可以办理业务 ,并且在时间范围是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<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<cstdlib>
     5 #include<queue>
     6 using namespace std;
     7 struct node
     8 {
     9     int arr;//离开时间
    10     int wait;//等待时间
    11     int lea;//离开时间
    12 };
    13 int main()
    14 {
    15     int t ;
    16     cin>>t;
    17     for(int i = 1 ; i <= t ; i++)
    18     {
    19         double sumtime  = 0.0;//初始化一定要放到循环里边,要不然会覆盖,就会出现错误,这个地方一定一定要注意。
    20         int q = 0,p = 0 ;//q第一队最后一个人离开时间
    21         queue<int>Q,P;//定义两个队列,一个是1窗口的一个是2窗口的。保存的是每个队伍的离开时间
    22         node a[101];
    23         int n;
    24         cin>>n;
    25         for(int j = 1 ; j <= n ; j++)
    26         {
    27             scanf("%d %d",&a[j].arr,&a[j].wait);
    28             while(!Q.empty()&&Q.front()<=a[j].arr)//判断原有队列是否有人离开,只要到达时间小于等于前一个人的离开时间
    29                 Q.pop();
    30             while(!P.empty()&&P.front()<=a[j].arr)
    31                 P.pop();
    32             if(Q.size()<=P.size())
    33             {
    34                 if(a[j].arr<p)//如果后来的人的时间小于前一个人离开的时间那么他最后离开的时间是自己逗留的时间加前一个人走的时间点
    35                     a[j].lea = p +a[j].wait;
    36                 else
    37                     a[j].lea = a[j].arr+a[j].wait ;
    38                 p = a[j].lea;
    39                 sumtime += p-a[j].arr ;
    40                 Q.push(p);//压入队列中
    41             }
    42             else
    43             {
    44                 if(a[j].arr<q)
    45                     a[j].lea = q+a[j].wait;
    46                 else
    47                     a[j].lea = a[j].arr+a[j].wait ;
    48                 q = a[j].lea ;
    49                 sumtime += q-a[j].arr ;
    50                 P.push(q);
    51             }
    52         }
    53         printf("%.2lf
    ",1.0*sumtime/n);
    54     }
    55     return 0 ;
    56 }
    View Code
  • 相关阅读:
    不同数据类型在不同编译器下字节大小
    gbk/utf8/gb2312 编码中汉字字母数字所占字节数
    剑指Offer-12 矩阵中的路径
    螺旋矩阵(数组)问题(网易考点)
    C++ 多继承导致的指针偏移问题
    面试题--链表实现插入排序
    C++ 二叉树的深度优先遍历(前中后序)以及广度优先遍历
    (转)软连接和硬链接作用以及区别
    TCP/IP网络五层结构理解以及数据传输流程的理解图示
    常考知识点:进程与线程,多进程与多线程
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3228122.html
Copyright © 2011-2022 走看看