Pagini recente » Cod sursa (job #233219) | Cod sursa (job #6646) | Cod sursa (job #1289383) | Cod sursa (job #254562) | Cod sursa (job #635547)
Cod sursa(job #635547)
using namespace std;
#include<fstream>
#include<cstring>
#define ll long long
int N, M;
int Dx[4], Dy[4];
int Sx[4], Sy[4], C[4];
int st[4], viz[4], K, state;
ll sol;
inline int abs( int a) { return a>0?a:-a; }
void solve()
{
int x = 0, y = 0;
ll cst = 0;
for( int i = 1; i <= K; ++i )
{
if( state & ( 1 << (i-1) ) )
{
cst += 1LL * abs((x - Dx[st[i]]) ) + 1LL * abs( (y - Dy[st[i]]) );
cst += 1LL * C[st[i]];
x = Sx[st[i]]; y = Sy[st[i]];
}
else
{
cst += 1LL * abs( x - Sx[st[i]] ) + 1LL * abs( y - Sy[st[i]] );
cst += 1LL * C[st[i]];
x = Dx[st[i]]; y = Dy[st[i]];
}
}
cst += 1LL * abs( (N - x) ) + abs( (M - y) );
if( sol == -1 || sol > cst ) sol = cst;
}
void aranj( int k )
{
if( k == K + 1 )
{
for(int i = 0; i < (1<<K); ++i)
{
state = i;
solve();
}
}
else
for(int i = 1; i <= 3; ++i)
if( !viz[i] )
{
st[k] = i;
viz[i] = 1;
aranj(k+1);
viz[i] = 0;
}
}
int main()
{
ifstream in("portal3.in"); ofstream out("portal3.out");
int T;
in >> T;
for(;T;--T)
{
in >> N >> M;
for(int i = 1; i <= 3; ++i)
in >> Sx[i] >> Sy[i] >> Dx[i] >> Dy[i] >> C[i];
sol = 1LL * N + 1LL * M;
for(int i = 1; i <= 3; ++i)
{
K = i;
aranj(1);
}
out << sol << "\n";
}
return 0;
}