Pagini recente » Cod sursa (job #53342) | Cod sursa (job #488893) | Cod sursa (job #1387720) | Cod sursa (job #245982) | Cod sursa (job #636116)
Cod sursa(job #636116)
#include<stdio.h>
int abs(int a)
{
if(a>=0)
return a;
return 0-a;
}
struct joe
{
int x1,y1,x2,y2; long long c;
};
joe port[5];
joe miniq [100];
inline int rez()
{
int nrq=0,nrq2=0,c,n,m,i,j,min,k;
scanf("%d%d",&n,&m);
miniq[0].x1=0;
miniq[0].y1=0;
miniq[0].c=0;
min=n+m;
for(i=1;i<=3;++i)
scanf("%d%d%d%d%lld",&port[i].x1,&port[i].y1,&port[i].x2,&port[i].y2,&port[i].c);
for(k=0;k<=1;++k)
for(i=1;i<=3;++i)
{
for(j=nrq;j>=k;--j)
{
if(miniq[j].y2!=i&&miniq[miniq[j].x2].y2!=i)
{
c=abs(port[i].x1-miniq[j].x1)+abs(port[i].y1-miniq[j].y1)+miniq[j].c+port[i].c;
if(c<port[i].x2+port[i].y2)
{
++nrq2;
miniq[nrq2].c=c;
miniq[nrq2].x1=port[i].x2;
miniq[nrq2].y1=port[i].y2;
miniq[nrq2].x2=j;
miniq[nrq2].y2=i;
}
c=abs(port[i].x2-miniq[j].x1)+abs(port[i].y2-miniq[j].y1)+miniq[j].c+port[i].c;
if(c<port[i].x1+port[i].y1)
{
++nrq2;
miniq[nrq2].c=c;
miniq[nrq2].x1=port[i].x1;
miniq[nrq2].y1=port[i].y1;
miniq[nrq2].x2=j;
miniq[nrq2].y2=i;
}
}
}
nrq=nrq2;
}
for(i=1;i<=nrq;++i)
{
miniq[i].c=miniq[i].c+abs(n-miniq[i].x1)+abs(m-miniq[i].y1);
if(miniq[i].c<min)
min=miniq[i].c;
}
return min;
}
int main()
{
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
int i,t;
scanf("%d",&t);
for(i=1;i<=t;++i)
printf("%d\n",rez());
return 0;
}