Pagini recente » Cod sursa (job #504323) | Cod sursa (job #776200) | Cod sursa (job #3238422) | Borderou de evaluare (job #2689717) | Cod sursa (job #635506)
Cod sursa(job #635506)
#include <algorithm>
#include <stdio.h>
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
struct portal
{
ll x1, y1, x2, y2, c;
};
ll n, m, sol;
portal x[8];
ll p[8], sel[8];
ll dist(ll x1, ll y1, ll x2, ll y2)
{
return abs(x1 - x2) + abs(y1 - y2);
}
void perm(ll level, int conf)
{
if (level == 3)
{
ll xa = 0, ya = 0, pasi = 0;
for (int i = 0; i < 3; i++)
{
pasi += dist(xa, ya, x[p[i] + 3 * bool(conf & (1 << i))].x1, x[p[i] + 3 * bool(conf & (1 << i))].y1) + x[p[i]].c;
xa = x[p[i] + 3 * bool(conf & (1 << i))].x2;
ya = x[p[i] + 3 * bool(conf & (1 << i))].y2;
sol = min(sol, pasi + dist(xa, ya, n, m));
}
return;
}
for (int i = 1; i <= 3; i++)
if (!sel[i])
{
sel[i] = 1;
p[level] = i - 1;
perm(level + 1, conf);
sel[i] = 0;
}
}
int main()
{
ifstream cin("portal3.in");
ofstream cout("portal3.out");
int testCases;
for (cin >> testCases; testCases; testCases--)
{
cin >> n >> m;
sol = dist(0, 0, n, m);
for (int i = 0; i < 3; i++)
{
cin >> x[i].x1 >> x[i].y1 >> x[i].x2 >> x[i].y2 >> x[i].c;
x[i + 3].x1 = x[i].x2, x[i + 3].y1 = x[i].y2;
x[i + 3].x2 = x[i].x1, x[i + 3].y2 = x[i].y1;
x[i + 3].c = x[i].c;
}
for (int conf = 0; conf < (1 << 3); conf++)
perm(0, conf);
cout << sol;
}
return 0;
}