Cod sursa(job #636110)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 19 noiembrie 2011 17:07:07
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 5.63 kb
#include <fstream>

using namespace std;

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


struct pt {
    int x;
    int y;
};

int t,ti,n,m,c12,c34,c56;
pt p1,p2,p3,p4,p5,p6;

int portal1(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);
int portal2(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);
int portal3(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);
int portal4(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);
int portal5(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);
int portal6(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og);


int costminim(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56) {
    int cost;
    cost=n+m;
    int v;
    v=p1.x+p1.y+portal2(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c12;
    cost=min(cost,v);
    v=p2.x+p2.y+portal1(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c12;
    cost=min(cost,v);
    v=p3.x+p3.y+portal4(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c34;
    cost=min(cost,v);
    v=p4.x+p4.y+portal3(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c34;
    cost=min(cost,v);
    v=p5.x+p5.y+portal6(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c56;
    cost=min(cost,v);
    v=p6.x+p6.y+portal5(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,0)+c56;
    cost=min(cost,v);
    return cost;
}

int main () {
    f >> t;
    for (ti=1;ti<=t;ti++) {
        f >> n >> m;
        f >> p1.x >> p1.y >> p2.x >> p2.y >> c12;
        f >> p3.x >> p3.y >> p4.x >> p4.y >> c12;
        f >> p5.x >> p5.y >> p6.x >> p6.y >> c56;
        g << costminim(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56) << '\n';
    }
    f.close();g.close();
    return 0;
}



int portal1(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p1.x-p1.y;
    int v;
    if (og!=34) {
        v=p3.x+p3.y+portal4(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p1.x-p1.y+c34;
        cost=min(cost,v);
        v=p4.x+p4.y+portal3(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p1.x-p1.y+c34;
        cost=min(cost,v);
    }
    if (og!=56) {
        v=p5.x+p5.y+portal6(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p1.x-p1.y+c56;
        cost=min(cost,v);
        v=p6.x+p6.y+portal5(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p1.x-p1.y+c56;
        cost=min(cost,v);
    }
    return cost;
}
int portal2(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p2.x-p2.y;
    int v;
    if (og!=34) {
        v=p3.x+p3.y+portal4(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p2.x-p2.y+c34;
        cost=min(cost,v);
        v=p4.x+p4.y+portal3(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p2.x-p2.y+c34;
        cost=min(cost,v);
    }
    if (og!=56) {
        v=p5.x+p5.y+portal6(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p2.x-p2.y+c56;
        cost=min(cost,v);
        v=p6.x+p6.y+portal5(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,12)-p2.x-p2.y+c56;
        cost=min(cost,v);
    }
    return cost;
}
int portal3(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p3.x-p3.y;
    int v;
    if (og!=12) {
        v=p1.x+p1.y+portal2(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p3.x-p3.y+c12;
        cost=min(cost,v);
        v=p2.x+p2.y+portal1(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p3.x-p3.y+c12;
        cost=min(cost,v);
    }
    if (og!=56) {
        v=p5.x+p5.y+portal6(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p3.x-p3.y+c56;
        cost=min(cost,v);
        v=p6.x+p6.y+portal5(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p3.x-p3.y+c56;
        cost=min(cost,v);
    }
    return cost;
}

int portal4(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p4.x-p4.y;
    int v;
    if (og!=12) {
        v=p1.x+p1.y+portal2(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p4.x-p4.y+c12;
        cost=min(cost,v);
        v=p2.x+p2.y+portal1(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p4.x-p4.y+c12;
        cost=min(cost,v);
    }
    if (og!=56) {
        v=p5.x+p5.y+portal6(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p4.x-p4.y+c56;
        cost=min(cost,v);
        v=p6.x+p6.y+portal5(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,34)-p4.x-p4.y+c56;
        cost=min(cost,v);
    }
    return cost;
}


int portal5(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p5.x-p5.y;
    int v;
    if (og!=12) {
        v=p1.x+p1.y+portal2(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p5.x-p5.y+c12;
        cost=min(cost,v);
        v=p2.x+p2.y+portal1(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p5.x-p5.y+c12;
        cost=min(cost,v);
    }
    if (og!=34) {
        v=p3.x+p3.y+portal4(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p5.x-p5.y+c34;
        cost=min(cost,v);
        v=p4.x+p4.y+portal3(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p5.x-p5.y+c34;
        cost=min(cost,v);
    }
    return cost;
}

int portal6(int n,int m,pt p1,pt p2,pt p3,pt p4,pt p5,pt p6,int c12,int c34,int c56,int og) {
    int cost;
    cost=n+m-p6.x-p6.y;
    int v;
    if (og!=12) {
        v=p1.x+p1.y+portal2(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p6.x-p6.y+c12;
        cost=min(cost,v);
        v=p2.x+p2.y+portal1(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p6.x-p6.y+c12;
        cost=min(cost,v);
    }
    if (og!=34) {
        v=p3.x+p3.y+portal4(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p6.x-p6.y+c34;
        cost=min(cost,v);
        v=p4.x+p4.y+portal3(n,m,p1,p2,p3,p4,p5,p6,c12,c34,c56,56)-p6.x-p6.y+c34;
        cost=min(cost,v);
    }
    return cost;
}