Pagini recente » Cod sursa (job #1898283) | Cod sursa (job #1862824) | Cod sursa (job #3282162) | Cod sursa (job #2640080) | Cod sursa (job #643153)
Cod sursa(job #643153)
#include <cstdio>
FILE *f,*g;
struct cp{int x1,y1,x2,y2; long long c;} v[4];
long long mn;
int T,n,m,j,i;
int st[5];
int abs(int x) {
if(x<0) return -x;
return x;
}
int ok(int k) {
for (int i=1;i<=k-1;i++)
if (st[i]==st[k])
return 0;
return 1;
}
void tipar(int k) {
long long val=0;
int i,l=0,c=0,j;
for (j=0;j<(1<<k);j++) {
val=0,l=0,c=0;
for (i=1;i<=k;i++) {
if (j & (1<<(i-1))) {
val+=(long long)abs(l-v[st[i]].x1);
val+=(long long)abs(c-v[st[i]].y1);
l=v[st[i]].x2;
c=v[st[i]].y2;
val+=(long long)v[st[i]].c;
}
else {
val+=(long long)abs(l-v[st[i]].x2);
val+=(long long)abs(c-v[st[i]].y2);
l=v[st[i]].x1;
c=v[st[i]].y1;
val+=(long long)v[st[i]].c;
}
}
val+=(long long)abs(n-l);
val+=(long long)abs(m-c);
if (val<mn) mn=val;
}
}
void back(int p) {
int k;
k=1; st[k]=0;
while (k>0) {
if (st[k]<3) {
st[k]++;
if (ok(k)) {
if (k==p)
tipar(k);
else {
k++;
st[k]=0;
}
}
}
else
k--;
}
}
int main() {
f=fopen("portal3.in","r");
g=fopen("portal3.out","w");
fscanf(f,"%d",&T);
for (i=1;i<=T;i++) {
fscanf(f,"%d%d",&n,&m);
for (j=1;j<=3;j++)
fscanf(f,"%d%d%d%d%lld",&v[j].x1,&v[j].y1,&v[j].x2,&v[j].y2,&v[j].c);
mn=(long long)n+m;
for (j=1;j<=3;j++)
back(j);
}
fprintf(g,"%lld\n",mn);
fclose(g);
return 0;
}