SDUT 2087 离散事件模拟-银行管理

这题真的......

对我自己真的无语了,各种奇葩的错误有没有!!!

这是一个队列模拟题,我也想说模拟神马的最讨厌了。。。

直接上代码:

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

typedef struct node
{
    int x,y,t;
} tr ;
int cmp(const void *a,const void *b)
{
    tr *c=(tr *)a;
    tr *d=(tr *)b;
    if(c->x==d->x)
    {
        return c->t-d->t;
    }
    else
    {
        return c->x-d->x;
    }
}
int main()
{
    int t;
    tr lis[2000],qu1[1000],qu2[1000];
    scanf("%d",&t);
    while(t--)
    {
        int n,i,j,e1=0,e2=0,x1,x2,sum=0;;
        scanf("%d",&n);
        for(i=0; i<n; i++)
        {
            scanf("%d%d",&lis[i].x,&lis[i].y);
            lis[i].t=i;
        }
        qsort(lis,n,sizeof(tr),cmp);
        for(i=0; i<n; i++)
        {
            x1=-1;
            x2=-1;
            if(e1==0)
            {
                qu1[0].x=lis[i].x;
                qu1[0].y=lis[i].x+lis[i].y;
                e1++;
                continue;
            }
            else if(e2==0)
            {
                qu2[0].x=lis[i].x;
                qu2[0].y=lis[i].x+lis[i].y;
                e2++;
                continue;
            }
            for(j=0; j<e1; j++)
            {
                if(lis[i].x>=qu1[j].x&&lis[i].x<qu1[j].y)
                {
                    x1=e1-j;
                    break;
                }
            }
            for(j=0; j<e2; j++)
            {
                if(lis[i].x>=qu2[j].x&&lis[i].x<qu2[j].y)
                {
                    x2=e2-j;
                    break;
                }
            }
            if(x1==-1)
            {
                qu1[e1].x=lis[i].x;
                qu1[e1].y=lis[i].x+lis[i].y;
                e1++;
                continue;
            }
            if(x1>x2)
            {
                qu2[e2].x=lis[i].x;
                if(qu2[e2-1].y>lis[i].x)
                {
                    qu2[e2].y=qu2[e2-1].y+lis[i].y;
                }
                else
                {
                    qu2[e2].y=lis[i].x+lis[i].y;
                }
                e2++;
            }
            else
            {
                qu1[e1].x=lis[i].x;
                qu1[e1].y=qu1[e1-1].y+lis[i].y;
                e1++;
            }
        }
        for(i=0; i<e1; i++)
        {
            sum+=qu1[i].y-qu1[i].x;
        }
        for(i=0; i<e2; i++)
        {
            sum+=qu2[i].y-qu2[i].x;
        }
        printf("%.2lf\n",(double)sum/(double)n);
    }
    return 0;
}


posted @ 2013-07-22 21:59  、小呆  阅读(206)  评论(0编辑  收藏  举报