Cod sursa(job #638515)

Utilizator ChallengeMurtaza Alexandru Challenge Data 20 noiembrie 2011 21:59:10
Problema Portal3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.66 kb
#include <fstream>

using namespace std;

const char InFile[]="portal3.in";
const char OutFile[]="portal3.out";

ifstream fin(InFile);
ofstream fout(OutFile);

int T,N,M,X1[3],Y1[3],X2[3],Y2[3],C[3];
long long sum,sol;

inline long long myabs(int x)
{
	if(x<0)
	{
		return -x;
	}
	return x;
}

inline long long dist(int X1, int Y1, int X2, int Y2)
{
	return myabs(X2-X1)+myabs(Y2-Y1);
}

int main()
{
	fin>>T;
	for(register int i=1;i<=T;++i)
	{
		fin>>N>>M;
		for(register int j=0;j<3;++j)
		{
			fin>>X1[j]>>Y1[j]>>X2[j]>>Y2[j]>>C[j];
		}
		sol=dist(0,0,N,M);
		for(register int j=0;j<3;++j)
		{
			sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],N,M));
			sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],N,M));
		}
		
		for(register int j=0;j<3;++j)
		{
			for(register int k=0;k<3;++k)
			{
				if(j!=k)
				{
					sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],N,M));
					sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],N,M));
					sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],N,M));
					sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],N,M));
				}
			}
		}
		
		for(register int j=0;j<3;++j)
		{
			for(register int k=0;k<3;++k)
			{
				if(j!=k)
				{
					for(register int l=0;l<3;++l)
					{
						if(l!=k)
						{
							sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],X1[l],Y1[l])+C[l]+dist(X2[l],Y2[l],N,M));
							sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],X1[l],Y1[l])+C[l]+dist(X2[l],Y2[l],N,M));
							sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],X1[l],Y1[l])+C[l]+dist(X2[l],Y2[l],N,M));
							sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],X1[l],Y1[l])+C[l]+dist(X2[l],Y2[l],N,M));

							sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],X2[l],Y2[l])+C[l]+dist(X1[l],Y1[l],N,M));
							sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X1[k],Y1[k])+C[k]+dist(X2[k],Y2[k],X2[l],Y2[l])+C[l]+dist(X1[l],Y1[l],N,M));
							sol=min(sol,dist(0,0,X2[j],Y2[j])+C[j]+dist(X1[j],Y1[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],X2[l],Y2[l])+C[l]+dist(X1[l],Y1[l],N,M));
							sol=min(sol,dist(0,0,X1[j],Y1[j])+C[j]+dist(X2[j],Y2[j],X2[k],Y2[k])+C[k]+dist(X1[k],Y1[k],X2[l],Y2[l])+C[l]+dist(X1[l],Y1[l],N,M));
						}
					}
				}
			}
		}
		fout<<sol<<"\n";
	}
	fin.close();
	fout.close();
	return 0;
}