这题真的......
对我自己真的无语了,各种奇葩的错误有没有!!!
这是一个队列模拟题,我也想说模拟神马的最讨厌了。。。
直接上代码:
#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;
}