Cod sursa(job #636198)

Utilizator VmanDuta Vlad Vman Data 19 noiembrie 2011 17:43:25
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 2.42 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int N, M, T, X1, X2, X3, Y1, Y2, Y3, X4, Y4, X5, Y5, X6, Y6, C1, C2, C3;
int i, P[10], x, y;
long long best, R;

inline int modul(int a) { return a>0?a:-a; }

int main()
{
    freopen("portal3.in","r",stdin);
    freopen("portal3.out","w",stdout);
    
    scanf("%d", &T);
    while (T--)
    {
          scanf("%d %d", &N, &M);
          scanf("%d %d %d %d %d", &X1, &Y1, &X2, &Y2, &C1);
          scanf("%d %d %d %d %d", &X3, &Y3, &X4, &Y4, &C2);
          scanf("%d %d %d %d %d", &X5, &Y5, &X6, &Y6, &C3);
          
          for (i=1; i<=8; ++i)
              P[i] = i;
          best = (long long)N+M;

          do
          {
               for (int k=0; k<8; ++k)
               {
              R = 0; 
              x = y = 0;
              for (i=2; i<=4; ++i)
              { 
                  int aux;
                  if ((k&(1<<(i-2)))>0) aux = 3;
                     else aux=0;
                  switch ( P[i] + aux )
                  {
                   case 2:
                        R += (long long)modul(x-X1) + modul(y-Y1) + C1;
                        x = X2; y = Y2;
                        break;
                   case 3:
                        R += (long long)modul(x-X3) + modul(y-Y3) + C2;
                        x = X4; y = Y4;
                        break;
                   case 4:
                        R += (long long)modul(x-X5) + modul(y-Y5) + C3;
                        x = X6; y = Y6;
                        break;
                   case 5:
                        R += (long long)modul(x-X2) + modul(y-Y2) + C1;
                        x = X1; y = Y1;
                        break;
                   case 6:
                        R += (long long)modul(x-X4) + modul(y-Y4) + C2;
                        x = X3; y = Y3;
                        break;
                   case 7:
                        R += (long long)modul(x-X6) + modul(y-Y6) + C3;
                        x = X5; y = Y5;
                        break;
                   }
                   if (R>best) break;
                   if (R+modul(x-N) + modul(y-M) < best) best = R+modul(x-N) + modul(y-M);
              }  
              }                                                         
          }
          while (next_permutation(P+2, P+5));
        printf("%lld\n", best);
    }
       
    return 0;
}