离散事件模拟-银行管理

离散事件模拟-银行管理

Time Limit: 1000 msMemory Limit: 65536 KiB

Problem Description

 

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

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

Input

 

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

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

Output

 

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

Sample Input

1
1
60 10

Sample Output

10.00

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node
{
    int st,ba,ting;
}h[1000],j[1000];

int main()
{
    int a,b,c,d,e,f,g,x,y;
    int ren,m,n,sum;
    scanf("%d",&a);
    while(a--)
    {
        ren=0;m=0;n=0;sum=0;
        memset(h,0,sizeof(h));
        memset(j,0,sizeof(j));
        scanf("%d",&b);
        for(c=1;c<=b;c++)
        {
            scanf("%d %d",&d,&e);
            if(d>360||d<0)
                continue;
                ren++;
            for(f=0;f<m;f++)
            {
                if(d<h[f].st+h[f].ba+h[f].ting)
                {
                    break;
                }
            }
            for(g=0;g<n;g++)
            {
                if(d<j[g].st+j[g].ba+j[g].ting)
                {
                    break;
                }
            }
            if(f==m)
            {
                m=0;
                h[m].st=d;
                h[m].ba=e;
                h[m].ting=0;
                sum+=e;
                m++;
            }
            else if(g==n)
            {
                n=0;
                j[n].st=d;
                j[n].ba=e;
                j[n].ting=0;
                sum+=e;
                n++;
            }
            else if(m-f<=n-g)
            {
                for(x=f;x<m;x++)
                {
                    h[x-f]=h[x];
                }
                for(y=g;y<n;y++)
                {
                    j[y-g]=j[y];
                }
                m=m-f;
                n=n-g;

                    h[m].st=d;
                    h[m].ba=e;
                    h[m].ting=h[m-1].st+h[m-1].ba+h[m-1].ting-d;
                    sum+=h[m-1].st+h[m-1].ba+h[m-1].ting-d+e;
                    m++;

            }
            else if(m-f>n-g)
            {
                for(x=f;x<m;x++)
                {
                    h[x-f]=h[x];
                }
                for(y=g;y<n;y++)
                {
                    j[y-g]=j[y];
                }
                m=m-f;
                n=n-g;

                    j[n].st=d;
                    j[n].ba=e;
                    j[n].ting=j[n-1].st+j[n-1].ba+j[n-1].ting-d;
                    sum+=j[n-1].st+j[n-1].ba+j[n-1].ting-d+e;
                    n++;

            }
        }
        printf("%.2lf\n",(1.0*sum)/ren);
    }
    return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页