Cod sursa(job #637920)

Utilizator darrenRares Buhai darren Data 20 noiembrie 2011 17:34:44
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.02 kb
#include <fstream>
#include <algorithm>
#include <utility>

using namespace std;

#define x first
#define y second

const long long INF = 1LL << 60;

int T, N, M;
pair<int, int> C1[6], C2[6];
long long Cost[6], result;

inline int iabs(int x)
{
	return (x < 0 ? -x : x);
}
inline long long dist(pair<int, int> i1, pair<int, int> i2)
{
	return iabs(i1.x - i2.x) + iabs(i1.y - i2.y);
}

int main()
{
	ifstream fin("portal3.in");
	ofstream fout("portal3.out");
	
	fin >> T;
	while (T--)
	{
		fin >> N >> M;
		fin >> C1[1].x >> C1[1].y >> C2[1].x >> C2[1].y >> Cost[1];
		fin >> C1[2].x >> C1[2].y >> C2[2].x >> C2[2].y >> Cost[2];
		fin >> C1[3].x >> C1[3].y >> C2[3].x >> C2[3].y >> Cost[3];
		C1[4] = make_pair(N, M);
		
		result = INF;
		
		for (int i = 0; i <= 3; ++i)
			for (int j = 0; j <= 3; ++j)
				for (int k = 0; k <= 3; ++k)
					result = min(result, dist(C1[0], C1[i]) + dist(C2[i], C1[j]) + dist(C2[j], C1[k]) + dist(C2[k], C1[4]) + Cost[i] + Cost[j] + Cost[k]);
		
		fout << result << '\n';
	}
	
	fin.close();
	fout.close();
}