Pagini recente » Monitorul de evaluare | Cod sursa (job #3187580) | Cod sursa (job #1590906) | Cod sursa (job #1578238) | Cod sursa (job #637263)
Cod sursa(job #637263)
#include<stdio.h>
struct X
{
int x1,y1,x2,y2,cost;
};
using namespace std;
int D,min,dist1,dist2,dist3,dist4,dist5,dist6,i,t,j,N,M;
X P[10];
int abs(int x)
{
return ((x>0) ? x:-x);
}
int dist(int x1,int y1,int x2,int y2)
{
return (abs(x2-x1)+abs(y2-y1));
}
void solve(int x)
{
X last;
int i;
last.x1=0;
last.y1=0;
D=0;
if ((1&x)&&((1<<3)&x)) return;
if ((2&x)&&((1<<4)&x)) return;
if ((4&x)&&((1<<5)&x)) return;
for (i=1;i<=6;i++)
if ((1<<(i-1))&x)
{
D=D+dist(last.x1,last.y1,P[i].x1,P[i].x1)+P[i].cost;
last.x1=P[i].x2;
last.y1=P[i].y2;
}
D=D+dist(last.x1,last.y1,N,M);
if (D<min) min=D;
}
int main()
{
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
scanf("%d",&t);
for (i=1;i<=t;i++)
{
scanf("%d%d",&N,&M);
for (i=1;i<=3;i++)
scanf("%d%d%d%d%d",&P[i].x1,&P[i].y1,&P[i].x2,&P[i].y2,&P[i].cost);
for (i=4;i<=6;i++)
{
P[i].x1=P[i-3].x2;
P[i].y1=P[i-3].y1;
P[i].x2=P[i-3].x1;
P[i].y2=P[i-3].y1;
P[i].cost=P[i-3].cost;
}
min=N+M-1;
for (j=1;j<=63;j++)
solve(j);
printf("%d\n",min);
}
}