Cod sursa(job #635453)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 19 noiembrie 2011 11:46:33
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.13 kb
#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 [40];


inline int rez()
{
	int nrq=0,nrq2=0,n,m,i,j,min;
	scanf("%d%d",&n,&m);
	miniq[0].x1=1;
	miniq[0].y1=1;
	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(j=nrq;j>=0;--j)
		{
			++nrq2;
			miniq[nrq2].c=abs(port[i].x1-miniq[j].x1)+abs(port[i].y1-miniq[j].y1)+miniq[j].c+port[i].c;
			miniq[nrq2].x1=port[i].x2;
			miniq[nrq2].y1=port[i].y2;
			++nrq2;
			miniq[nrq2].c=abs(port[i].x2-miniq[j].x1)+abs(port[i].y2-miniq[j].y1)+miniq[j].c+port[i].c;
			miniq[nrq2].x1=port[i].x1;
			miniq[nrq2].y1=port[i].y1;
		}
		nrq=nrq2;
	}
	for(i=1;i<=nrq;++i)
	{
		miniq[i].c=miniq[i].c+abs(n-miniq[i].x1)+abs(m-miniq[i].y1)+2;
		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;
}