Pagini recente » Cod sursa (job #7084) | Cod sursa (job #1635529) | Cod sursa (job #1248837) | Cod sursa (job #1888442) | Cod sursa (job #638244)
Cod sursa(job #638244)
#include <stdio.h>
#include <stdlib.h>
const int INF = 2000000100;
long long cost[4][4][4];
struct portal {
int x1, y1;
int x2, y2;
int c;
} v[4];
inline int min(int a, int b)
{
return (a < b) ? a : b;
}
int main()
{
freopen("portal3.in", "r", stdin);
freopen("portal3.out", "w", stdout);
int T, i, j, k, N, M;
scanf("%d", &T);
for ( ; T; --T) {
scanf("%d %d", &N, &M);
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].c);
for (i = 0; i < 3; ++i) {
cost[0][i][0] = v[i].x1 + v[i].y1 + v[i].c;
cost[1][i][0] = v[i].x2 + v[i].y2 + v[i].c;
}
for (j = 1; j < 3; ++j) {
for (i = 0; i < 3; ++i) {
cost[0][i][j] = cost[1][i][j] = INF;
for (k = 0; k < 3; ++k) {
if (k != i) {
cost[0][i][j] = min(cost[0][i][j], v[i].c + min(cost[0][k][j - 1] + abs(v[k].x2 - v[i].x1) + abs(v[k].y2 - v[i].y1),
cost[1][k][j - 1] + abs(v[k].x1 - v[i].x1) + abs(v[k].y1 - v[i].y1)));
if (cost[0][i][j] > INF)
cost[0][i][j] = INF;
cost[1][i][j] = min(cost[1][i][j], v[i].c + min(cost[0][k][j - 1] + abs(v[k].x2 - v[i].x2) + abs(v[k].y2 - v[i].y2),
cost[1][k][j - 1] + abs(v[k].x1 - v[i].x2) + abs(v[k].y1 - v[i].y2)));
if (cost[1][i][j] > INF)
cost[1][i][j] = INF;
}
}
}
}
long long costMin = N + M;
for (j = 0; j < 3; ++j)
for (i = 0; i < 3; ++i) {
costMin = min(costMin, min(cost[0][i][j] + abs(N - v[i].x2) + abs(M - v[i].y2),
cost[1][i][j] + abs(N - v[i].x1) + abs(M - v[i].y1)));
}
printf("%lld\n", costMin);
}
return 0;
}