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; }