Cod sursa(job #634855)

Utilizator cezar305Mr. Noname cezar305 Data 17 noiembrie 2011 18:25:51
Problema Portal3 Scor Ascuns
Compilator cpp Status done
Runda Marime 1.58 kb
#include<stdio.h>
#include<set>
using namespace std;

#define pi pair<long long,long long>
#define x first
#define y second
#define minim(a,b) (a<b ? a : b)
#define ll long long

pi p[13];
ll d[13][13],sol,t,s1,s2,s3;

ll modul(ll val)
{if(val>-1) return val;else return -val;}

ll dist(pi a,pi b)
{
	return modul(a.x-b.x)+modul(a.y-b.y);
}

int main ()
{
	int i,j;

	freopen("portal3.in","r",stdin);
	freopen("portal3.out","w",stdout);

	scanf("%lld",&t);
	for(;t;t--)
	{
		scanf("%lld%lld",&p[7].x,&p[7].y);
	
		scanf("%lld%lld%lld%lld%lld\n",&p[1].x,&p[1].y,&p[2].x,&p[2].y,&s1);
		scanf("%lld%lld%lld%lld%lld\n",&p[3].x,&p[3].y,&p[4].x,&p[4].y,&s2);
		scanf("%lld%lld%lld%lld%lld\n",&p[5].x,&p[5].y,&p[6].x,&p[6].y,&s3);
	
		for(i=0;i<=7;i++)
			for(j=0;j<=7;j++)
				d[i][j]=dist(p[i],p[j]);
		
		sol=d[0][7];
		sol=minim(sol,d[0][1]+d[2][7]+s1);
		sol=minim(sol,d[0][3]+d[4][7]+s2);
		sol=minim(sol,d[0][5]+d[6][7]+s3);
		sol=minim(sol,d[0][1]+d[2][3]+d[4][7]+s1+s2);
		sol=minim(sol,d[0][1]+d[2][5]+d[6][7]+s1+s3);
		sol=minim(sol,d[0][3]+d[4][1]+d[2][7]+s2+s1);
		sol=minim(sol,d[0][3]+d[4][5]+d[6][7]+s2+s3);
		sol=minim(sol,d[0][5]+d[6][1]+d[2][7]+s3+s1);
		sol=minim(sol,d[0][5]+d[6][3]+d[4][7]+s3+s2);
		sol=minim(sol,d[0][1]+d[2][3]+d[4][5]+d[6][7]+s1+s2+s3);
		sol=minim(sol,d[0][1]+d[2][5]+d[6][3]+d[4][7]+s1+s2+s3);
		sol=minim(sol,d[0][3]+d[4][1]+d[2][5]+d[6][7]+s1+s2+s3);
		sol=minim(sol,d[0][3]+d[4][5]+d[6][1]+d[2][7]+s1+s2+s3);
		sol=minim(sol,d[0][5]+d[6][1]+d[2][3]+d[4][7]+s1+s2+s3);
		sol=minim(sol,d[0][5]+d[6][3]+d[4][1]+d[2][7]+s1+s2+s3);
		printf("%lld\n",sol);	
	}
	return 0;
}