Cod sursa(job #639411)

Utilizator milijrCristian Militaru milijr Data 23 noiembrie 2011 10:22:39
Problema Portal3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
struct porty
{
	int x1,y1,x2,y2,c;
};
struct pct
{
	int x,y;
};
int main()
{
	ifstream fi("portal3.in");
	ofstream fo("portal3.out");
	int t,T,i,j,k,m,n,tmin;
	pct cu;
	porty p[8];
	fi>>T;
	while(T)
	{
		fi>>n>>m;
		tmin = m + n;
		for(i = 1; i <= 3; i++)
		{
			fi>>p[i].x1>>p[i].y1>>p[i].x2>>p[i].y2>>p[i].c;
			p[i + 3].x1 = p[i].x2;
			p[i + 3].y1 = p[i].y2;
			p[i + 3].x2 = p[i].x1;
			p[i + 3].y2 = p[i].y1;
			p[i + 3].c  = p[i].c;
		}
		for(i = 0; i <= 6; i++)
			for(j = 0; j <= 6; j++)
				for(k = 0; k <= 6; k++)
				{
					if((i == j && i != 0) || (i == k && i != 0) || (j == k && j != 0))
						continue;
					cu.x = 0;
					cu.y = 0;
					t = 0;
					if(i)
					{
						//mergem pana la intrarea in portalul i
						t		+= abs(cu.x - p[i].x1) + abs(cu.y - p[i].y1);
						//teleportarea
						t		+= p[i].c;
						cu.x	= p[i].x2;
						cu.y	= p[i].y2;
					}
					if(j)
					{
						//mergem pana la intrarea in portalul j
						t		+= abs(cu.x - p[j].x1) + abs(cu.y - p[j].y1);
						//teleportarea
						t		+= p[j].c;
						cu.x	= p[j].x2;
						cu.y	= p[j].y2;
					}
					if(k)
					{
						//mergem pana la intrarea in portalul k
						t		+= abs(cu.x - p[k].x1) + abs(cu.y - p[k].y1);
						//teleportarea
						t		+= p[k].c;
						cu.x	= p[k].x2;
						cu.y	= p[k].y2;
					}
					t += abs(n - cu.x) + abs(m - cu.y);
					if(t < tmin)
						tmin = t;
				}
		fo<<tmin<<'\n';
		T--;
	}
}