Pagini recente » Cod sursa (job #1450652) | Cod sursa (job #2908478) | Cod sursa (job #733388) | Cod sursa (job #3133029) | Cod sursa (job #636927)
Cod sursa(job #636927)
#include <stdio.h>
inline int abs(int a)
{
return (a < 0) ? -a : a;
}
struct portal {
int x1, x2;
int y1, y2;
int cost;
} v[4];
int main()
{
freopen("portal3.in", "r", stdin);
freopen("portal3.out", "w", stdout);
int T, m, n, i, j, k;
long long res;
scanf("%d", &T);
for ( ; T; --T) {
scanf("%d %d", &n, &m);
if (n == 1 && m == 1) {
printf("0\n");
continue;
}
for (i = 0; i < 3; ++i)
scanf("%d %d %d %d %d", &v[i].x1, &v[i].y1, &v[i].x2, &v[i].y2, &v[i].cost);
for (i = 0; i < 2; ++i)
for (j = i + 1; j < 3; ++j)
if (v[i].x1 + v[i].y1 > v[j].x1 + v[j].x2) {
struct portal aux = v[i];
v[i] = v[j];
v[j] = aux;
}
int min = m + n;
for (i = 0; i < 3; ++i) {
res = v[i].x1 + v[i].y1 + n - v[i].x2 + m - v[i].y2 + v[i].cost;
if (res < min)
min = res;
}
for (i = 0; i < 3; ++i)
for (j = i + 1; j < 3; ++j) {
res = v[i].x1 + v[i].y1 + abs(v[j].x1 - v[i].x2) + abs(v[j].y1 - v[i].y2) +
n - v[j].x2 + m - v[j].y2 + v[i].cost + v[j].cost;
if (res < min)
min = res;
res = v[j].x1 + v[j].y1 + abs(v[j].x1 - v[i].x2) + abs(v[i].y1 - v[j].y2) +
n - v[i].x2 + m - v[i].y2 + v[j].cost + v[i].cost;
if (res < min)
min = res;
}
for (i = 0; i < 3; ++i)
for (j = i + 1; j < 3; ++j) {
if (j == 1) k = 2;
else if (j == 2 && i == 0) k = 1;
else if (j == 2 && i == 1) k = 0;
res = v[i].x1 + v[i].y1 + abs(v[j].x1 - v[i].x2) + abs(v[j].y1 - v[i].y2) + abs(v[k].x1 - v[j].x2)
+ abs(v[k].y1 - v[j].y2) + n - v[k].x2 + m - v[k].y2 + v[i].cost + v[j].cost + v[k].cost;
if (res < min)
min = res;
}
printf("%d\n", min);
}
return 0;
}