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

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

    为了简化问题,我们认为银行只有一号窗口和二号窗口可以办理业务 ,并且在时间范围是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<string.h>
      3 #include<stdlib.h>
      4 
      5 struct node
      6 {
      7     int x,y,t;
      8 };
      9 
     10 int cmp(const void *a, const void *b)
     11 {
     12     struct node *c = (struct node*)a;
     13     struct node *d = (struct node*)b;
     14     if(c->x == d->x)
     15         return c->t-d->t;
     16     else return c->x-d->x;
     17 }
     18 
     19 int main()
     20 {
     21     struct node lis[110],que1[110],que2[110];
     22     int t,n,e1,e2,x1,x2,sum;
     23     int i ,j;
     24     scanf("%d",&t);
     25     while(t--)
     26     {
     27         e1 = 0; e2 = 0;sum = 0;
     28         scanf("%d",&n);
     29         //lis[]存到达时间和逗留时间
     30         //que1[]和que2[]存到达时间和结束时间
     31         for( i = 0; i < n; i++)
     32         {
     33             scanf("%d %d",&lis[i].x,&lis[i].y);
     34             lis[i].t = i;
     35         }
     36         qsort(lis,n,sizeof(lis[0]),cmp);
     37         for( i = 0; i < n; i++)
     38         {
     39             x1 = -1;
     40             x2 = -1;
     41             //若1窗口没人
     42             if(e1 == 0)
     43             {
     44                 que1[0].x = lis[i].x;
     45                 que1[0].y = lis[i].x + lis[i].y;
     46                 e1++;
     47                 continue;
     48             }
     49             //若2窗口没人
     50             else if(e2 == 0)
     51             {
     52                 que2[0].x = lis[i].x;
     53                 que2[0].y = lis[i].x + lis[i].y;
     54                 e2++;
     55                 continue;
     56             }
     57             for(j = 0; j < e1; j++)
     58             {
     59                 if(lis[i].x >= que1[j].x && lis[i].x < que1[j].y)
     60                 {
     61                     x1 = e1-j;
     62                     break;
     63                 }
     64             }
     65             for(j = 0; j < e2; j++)
     66             {
     67                 if(lis[i].x >= que2[j].x && lis[i].x < que2[j].y)
     68                 {
     69                     x2 = e2-j;
     70                     break;
     71                 }
     72             }
     73             if(x1 == -1)
     74             {
     75                 que1[e1].x = lis[i].x;
     76                 que1[e1].y = lis[i].x + lis[i].y;
     77                 e1++;
     78                 continue;
     79             }
     80             //若1窗口比2窗口的人多
     81             if(x1 > x2)
     82             {
     83                 que2[e2].x = lis[i].x;
     84                 if(que2[e2-1].y > lis[i].x)
     85                     que2[e2].y = que2[e2-1].y+lis[i].y;
     86                 else que2[e2].y = lis[i].x + lis[i].y;
     87                 e2++;
     88             }
     89             else
     90             {
     91                 que1[e1].x = lis[i].x;
     92                 que1[e1].y = que1[e1-1].y+lis[i].y;
     93                 e1++;
     94             }
     95 
     96         }
     97         for(i = 0; i < e1; i++)
     98         {
     99             sum += que1[i].y-que1[i].x;
    100         }
    101         for(i = 0; i < e2; i++)
    102         {
    103             sum += que2[i].y - que2[i].x;
    104         }
    105         printf("%.2lf
    ",(sum*1.0)/n);
    106     }
    107     return 0;
    108 }
    View Code
  • 相关阅读:
    Passbook教程中生成pass时遇到的“Couldn't find a passTypeIdentifier in the pass”
    几个app maker的网站
    forever start Error: Cannot find module './daemon.v0.10.26'
    [Effective Objective-C 读书笔记] 第1章 几条基本写法 (2~5条)
    在linux环境下配置node:node + npm + forever
    [技术翻译] 构建现代化的Objective-C (下)
    [技术翻译]构建现代化的 Objective-C (上)
    NSDate与 NSString 、long long类型的相互转化
    Java对象的序列化与反序列化:默认格式及JSON格式(使用jackson)
    基本网络请求
  • 原文地址:https://www.cnblogs.com/LK1994/p/3221313.html
Copyright © 2011-2022 走看看