Cod sursa(job #637640)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 20 noiembrie 2011 15:42:01
Problema Portal3 Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 4.23 kb
#include <iostream>
#include <fstream>

using namespace std;

const int t2[24][2]={{1,3},
                {1,4},
                {1,5},
                {1,6},
                {2,3},
                {2,4},
                {2,5},
                {2,6},
                {3,1},
                {3,2},
                {3,5},
                {3,6},
                {4,1},
                {4,2},
                {4,5},
                {4,6},
                {5,1},
                {5,2},
                {5,3},
                {5,4},
                {6,1},
                {6,2},
                {6,3},
                {6,4}};
const int t3[48][3]={{1,3,5},
                    {1,3,6},
                    {1,4,5},
                    {1,4,6},
                    {1,5,3},
                    {1,5,4},
                    {1,6,3},
                    {1,6,4},
                    {2,3,5},
                    {2,3,6},
                    {2,4,5},
                    {2,4,6},
                    {2,5,3},
                    {2,5,4},
                    {2,6,3},
                    {2,6,4},
                    {3,1,5},
                    {3,1,6},
                    {3,2,5},
                    {3,2,6},
                    {3,5,1},
                    {3,5,2},
                    {3,6,1},
                    {3,6,2},
                    {4,1,5},
                    {4,1,6},
                    {4,2,5},
                    {4,2,6},
                    {4,5,1},
                    {4,5,2},
                    {4,6,1},
                    {4,6,2},
                    {5,1,3},
                    {5,1,4},
                    {5,2,3},
                    {5,2,4},
                    {5,3,1},
                    {5,3,2},
                    {5,4,1},
                    {5,4,2},
                    {6,1,3},
                    {6,1,4},
                    {6,2,3},
                    {6,2,4},
                    {6,3,1},
                    {6,3,2},
                    {6,4,1},
                    {6,4,2}};


struct portal
{
  long long x,y,t,c;
};

portal p[10];

ifstream in("portal3.in");
ofstream out("portal3.out");

inline long long modul(long long x)
{
    if(x<0)
        return -x;
    return x;
}



int main()
{
    long long t,j,i,m,n,time,time1,time2,time3,time4,minim;
    in>>t;
    for(j=1;j<=t;++j)
    {
        in>>n>>m;
        in>>p[1].x>>p[1].y>>p[2].x>>p[2].y>>p[1].t;
        p[2].t=p[1].t;
        in>>p[3].x>>p[3].y>>p[4].x>>p[4].y>>p[3].t;
        p[4].t=p[3].t;
        in>>p[5].x>>p[5].y>>p[6].x>>p[6].y>>p[5].t;
        p[6].t=p[5].t;
        p[1].c=2;
        p[2].c=1;
        p[3].c=4;
        p[4].c=3;
        p[5].c=6;
        p[6].c=5;

        minim=m+n;
        for(i=1;i<=6;++i)
        {
            time=p[i].x+p[i].y+p[i].t+n-p[p[i].c].x+m-p[p[i].c].y;
            if(minim>time)
                minim=time;
        }
        for(i=0;i<=23;++i)
        {
            time1=p[t2[i][0]].x+p[t2[i][0]].y+p[t2[i][0]].t;//distanta pana la primul portal
            time2=modul(p[p[t2[i][0]].c].x-p[t2[i][1]].x)+modul(p[p[t2[i][0]].c].y-p[t2[i][1]].y)+p[t2[i][1]].t;//distanta intre corespondentul primului si al doilea portal
            time3=n-p[p[t2[i][1]].c].x+m-p[p[t2[i][1]].c].y;//distanta de la corespondentul celui  de al doilea portal pana la capat
            time=time1+time2+time3;
            if(minim>time)
                minim=time;
        }
        for(i=0;i<48;++i)
        {
            time1=p[t3[i][0]].x+p[t3[i][0]].y+p[t3[i][0]].t;//distanta pana la primul portal
            time2=modul(p[p[t3[i][0]].c].x-p[t3[i][1]].x)+modul(p[p[t3[i][0]].c].y-p[t3[i][1]].y)+p[t3[i][1]].t;//distanta intre corespondentul primului si al doilea portal
            time3=modul(p[p[t3[i][1]].c].x-p[t3[i][2]].x)+modul(p[p[t3[i][1]].c].y-p[t3[i][2]].y)+p[t3[i][2]].t;//distanta intre corespondentul celui deal doilea si al treilea portal
            time4=n-p[ p[ t3[i][2] ].c].x+m-p[p[t3[i][2]].c].y;//distanta de la corespondentul celui de al treilea portal pana la capat
            time=time1+time2+time3+time4;
            if(minim>time)
                minim=time;
        }
        out<<minim<<"\n";
    }
    return 0;
}