Pagini recente » Cod sursa (job #2445007) | Cod sursa (job #2460358) | Cod sursa (job #1258273) | Cod sursa (job #566130) | Cod sursa (job #638019)
Cod sursa(job #638019)
Utilizator |
roots1 roots |
Data |
20 noiembrie 2011 18:11:55 |
Problema |
Portal3 |
Scor |
0 |
Compilator |
cpp |
Status |
done |
Runda |
.com 2011 |
Marime |
4.36 kb |
#include <fstream>
using namespace std;
ifstream in;
ofstream out;
inline int abs(int x)
{
if(x<0) x*=-1;
return x;
}
int x[7],y[7],c[4];
int sol[4];
int d,M,N;
inline void verif()
{
int px,py;
int p,dist;
int ok=0;
for(int i=1;i<=3;++i)
if(sol[i]!=0) ++ok;
if(ok==1)
{
px=py=dist=0;
for(int i=1;i<=3;++i)
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
}
if(ok==2)
{
px=py=dist=0;
for(int i=1;i<=3;++i)
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=3;i>=1;--i)
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
}
if(ok==3)
{
px=py=dist=0;
for(int i=1;i<=3;++i)
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=2;i<=1;++i)
{
if(i==4) i=1;
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=3;i<=2;++i)
{
if(i==4) i=1;
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=3;i>=1;--i)
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=2;i>=3;--i)
{
if(i==0) i=3;
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
px=py=dist=0;
for(int i=1;i>=2;--i)
{
if(i==0) i=3;
if(sol[i]!=0)
{
p=(i-1)*2;
p+=sol[i];
dist+=abs(px-x[p])+abs(py-y[p]);
dist+=c[i];
if(p%2==0) --p;
else ++p;
px=x[p];
py=y[p];
}
}
dist+=abs(M-px)+abs(N-py);
if(dist<d) d=dist;
}
}
inline void back(int k)
{
if(k>3) verif();
else
for(int i=0;i<=2;++i)
{
sol[k]=i;
back(k+1);
}
}
int main()
{
int Test;
in.open("portal3.in");
out.open("portal3.out");
in>>Test;
for(;Test--;)
{
in>>M>>N;
in>>x[1]>>y[1]>>x[2]>>y[2]>>c[1];
in>>x[3]>>y[3]>>x[4]>>y[4]>>c[2];
in>>x[5]>>y[5]>>x[6]>>y[6]>>c[3];
d=M+N+1;
back(1);
out<<d<<'\n';
}
in.close();
out.close();
return 0;
}