Pagini recente » Cod sursa (job #2674166) | Cod sursa (job #143047) | Cod sursa (job #1163019) | Cod sursa (job #641289) | Cod sursa (job #613625)
Cod sursa(job #613625)
Utilizator |
Mr. Noname cezar305 |
Data |
1 octombrie 2011 19:09:00 |
Problema |
Portal3 |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
1.7 kb |
#include <stdio.h>
#include <string.h>
struct portal
{
int x1, y1, x2, y2, c;
};
int n, m, t;
int sol[10][10];
portal v[5];
inline int abs (int a) {return a < 0 ? -a : a;}
int main ()
{
freopen ("portal3.in", "r", stdin);
freopen ("portal3.out", "w", stdout);
scanf ("%d", &t);
while (t --)
{
memset (sol, 0, sizeof (sol));
scanf ("%d %d", &n, &m);
sol[1][8] = sol[8][1] = n + m;
int i, j, k;
for (i = 1; i <= 3; i ++)
{
scanf ("%d %d %d %d %d", &v[i].x1, &v[i].y1, &v[i].x2, &v[i].y2, &v[i].c);
if (v[i].c > abs (v[i].x1 - v[i].x2) + abs (v[i].y1 - v[i].y2))
v[i].c = abs (v[i].x1 - v[i].x2) + abs (v[i].y1 - v[i].y2);
sol[1][2 * i] = sol[2 * i][1] = v[i].x1 + v[i].y1;
sol[1][2 * i + 1] = sol[2 * i + 1][1] = v[i].x2 + v[i].y2;
sol[8][2 * i] = sol[2 * i][8] = n + m - v[i].x1 - v[i].y1;
sol[8][2 * i + 1] = sol[2 * i + 1][8] = n + m - v[i].x2 - v[i].y2;
sol[2 * i][2 * i + 1] = sol[2 * i + 1][2 * i] = v[i].c;
}
for (i = 1; i <= 3; i ++)
for (j = 1; j <= 3; j ++)
if (i != j)
{
sol[2 * i][2 * j] = abs (v[i].x1 - v[j].x1) + abs (v[i].y1 - v[j].y1);
sol[2 * i][2 * j + 1] = abs (v[i].x1 - v[j].x2) + abs (v[i].y1 - v[j].y2);
sol[2 * i + 1][2 * j] = abs (v[i].x2 - v[j].x1) + abs (v[i].y2 - v[j].y1);
sol[2 * i + 1][2 * j + 1] = abs (v[i].x2 - v[j].x2) + abs (v[i].y2 - v[j].y2);
}
for (k = 1; k <= 8; k ++)
for (i = 1; i <= 8; i ++)
for (j = 1; j <= 8; j ++)
if (i != k && k != j && i != j)
if ((long long)sol[i][j] > (long long)sol[i][k] + sol[k][j])
sol[i][j] = sol[i][k] + sol[k][j];
printf ("%d\n", sol[1][8]);
}
return 0;
}