Cod sursa(job #636664)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 19 noiembrie 2011 22:24:11
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 1.37 kb
#include <stdio.h>
#include <stdlib.h>
struct portal
{
	long x1, y1, x2, y2, c;
}p[4];
const int a[15][4]={{1,4},{1,2,4},{1,2,3,4},{1,3,4},{1,3,2,4},{2,4},{2,1,4},{2,1,3,4},{2,3,4},{2,3,1,4},{3,4},{3,1,4},{3,1,2,4},{3,2,4},{3,2,1,4}};
const int dir[8][3]={{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};
long t, xf, yf, x, y, i, j, k;
long long timp, min;
long long dist(long x1, long y1, long x2, long y2);
int main()
{
	freopen("portal3.in", "r", stdin);
	freopen("portal3.out", "w", stdout);
	scanf("%ld", &t);
	for (;t>0;t--)
	{
		x=0;
		y=0;
		scanf("%ld%ld", &xf, &yf);
		for (i=1; i<=3; i++)
			scanf("%ld%ld%ld%ld%ld", &p[i].x1,  &p[i].y1,  &p[i].x2,  &p[i].y2,  &p[i].c);
		min=dist(x, y, xf, yf);
		for (i=0;i<15;i++)
			for (k=0;k<8;k++)
			{
				x=0;
				y=0;
				j=0;
				timp=0;
				while (a[i][j]!=4)
				{
					if (dir[k][a[i][j]]==0)
					{
						timp+=dist(x,y,p[a[i][j]].x1,p[a[i][j]].y1);
						timp+=p[a[i][j]].c;
						x=p[a[i][j]].x2;
						y=p[a[i][j]].y2;
					}//if
					else
					{
						timp+=dist(x,y,p[a[i][j]].x2,p[a[i][j]].y2);
						timp+=p[a[i][j]].c;
						x=p[a[i][j]].x1;
						y=p[a[i][j]].y1;
					}//else
					j++;
				}//while
				timp+=dist(x,y,xf,yf);
				if (timp<min)
					min=timp;
			}//for k
		printf("%lld\n", min);
	}//for t
	return 0;
}//main

long long dist(long x1, long y1, long x2, long y2)
{
	return abs(x1-x2)+abs(y1-y2);
}//dist