Pagini recente » Cod sursa (job #2045913) | Cod sursa (job #2723090) | Cod sursa (job #2868557) | Cod sursa (job #501323) | Cod sursa (job #638169)
Cod sursa(job #638169)
#include <fstream>
#include <stdlib.h>
#define oo 2000000099
using namespace std;
typedef struct Portal {
//struct Poarta {int x, y;} p[2];
int p1x,p1y,p2x,p2y;
} Portal;
Portal p[5];
long long cost[4][3][4], c[4];
int n,m;
inline int min(int a, int b)
{
return a<b?a:b;
}
int dist(int x1, int y1, int x2, int y2)
{
return abs(x1-x2)+abs(y1-y2);
}
long long rez()
{
int i,fol,ant;
//c[p][dir][fol] -> dir ==0 directia p0->p1, dir==1 directia p1->p0
for (i=0;i<3;++i)
{
cost[i][0][0]=c[i]+p[i].p1x+p[i].p1y;
cost[i][1][0]=c[i]+p[i].p2x+p[i].p2y;
}
for (fol=1;fol<3;++fol) //cate folosite
for (i=0;i<3;++i)
{
cost[i][0][fol]=cost[i][1][fol]=oo;
for (ant=0;ant<3;++ant)
if (ant!=i)
{
cost[i][0][fol]=min(cost[i][0][fol],c[i]+min(
cost[ant][0][fol-1]+dist(p[ant].p2x,p[ant].p2y,p[i].p1x,p[i].p1y),
cost[ant][1][fol-1]+dist(p[ant].p1x,p[ant].p1y,p[i].p1x,p[i].p1y)
));
if (cost[i][0][fol]>oo) cost[i][0][fol]=oo;
cost[i][1][fol]=min(cost[i][1][fol],c[i]+min(
cost[ant][0][fol-1]+dist(p[ant].p2x,p[ant].p2y,p[i].p2x,p[i].p2y),
cost[ant][1][fol-1]+dist(p[ant].p1x,p[ant].p1y,p[i].p2x,p[i].p2y)
));
if (cost[i][1][fol]>oo) cost[i][0][fol]=oo;
}
}
long long sol=n+m;
for (fol=0;fol<3;++fol)
for (i=0;i<3;++i)
{
sol=min(sol, min(
cost[i][0][fol]+ dist(p[i].p2x,p[i].p2y,n,m),
cost[i][1][fol]+ dist(p[i].p1x,p[i].p1y,n,m)
));
}
return sol;
}
int main()
{
ifstream fin("portal3.in");
ofstream fout("portal3.out");
int T,i;
fin>>T;
while (T--)
{
fin>>n>>m;
for (i=0;i<3;++i)
{
fin>>p[i].p1x>>p[i].p1y>>p[i].p2x>>p[i].p2y>>c[i];
}
fout<<rez()<<"\n";
}
return 0;
}