Cod sursa(job #637904)

Utilizator rootsroots1 roots Data 20 noiembrie 2011 17:28:17
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.16 kb
#include <fstream>

using namespace std;

ifstream in;
ofstream out;

inline int abs(int x)
{
    if(x<0) x*=-1;
    return x;
}

int x[7],y[7],c[4];
int sol[4];
int d,M,N;

inline void verif()
{
    int px=0,py=0;
    int p,dist=0;

    for(int i=1;i<=3;++i)
        if(sol[i]!=0)
        {
            p=(i-1)*2;
            p+=sol[i];

            dist+=abs(px-x[p])+abs(py-y[p]);
            dist+=c[i];

            if(p%2==0) --p;
            else ++p;

            px=x[p];
            py=y[p];
        }

    dist+=abs(px-M)+abs(py-N);

    if(dist<d) d=dist;
}

inline void back(int k)
{
    if(k>3) verif();
    else
        for(int i=0;i<=2;++i)
        {
            sol[k]=i;
            back(k+1);
        }
}

int main()
{
    int Test;

    in.open("portal3.in");
    out.open("portal3.out");

    in>>Test;

    for(;Test--;)
    {
        in>>M>>N;
        in>>x[1]>>y[1]>>x[2]>>y[2]>>c[1];
        in>>x[3]>>y[3]>>x[4]>>y[4]>>c[2];
        in>>x[5]>>y[5]>>x[6]>>y[6]>>c[3];

        d=M+N;
        back(1);

        out<<d<<'\n';
    }

    in.close();
    out.close();

    return 0;
}