Pagini recente » Cod sursa (job #2806813) | Cod sursa (job #436293) | Cod sursa (job #1907309) | Cod sursa (job #2627199) | Cod sursa (job #637907)
Cod sursa(job #637907)
Utilizator |
roots1 roots |
Data |
20 noiembrie 2011 17:30:11 |
Problema |
Portal3 |
Scor |
0 |
Compilator |
cpp |
Status |
done |
Runda |
.com 2011 |
Marime |
1.31 kb |
#include <fstream>
#include <cstring>
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=0,py=0;
int p,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;
}
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--;)
{
memset(x,0,sizeof(x));
memset(sol,0,sizeof(sol));
memset(y,0,sizeof(y));
memset(c,0,sizeof(c));
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;
back(1);
out<<d<<'\n';
}
in.close();
out.close();
return 0;
}