Pagini recente » Monitorul de evaluare | Cod sursa (job #960072) | Cod sursa (job #346720) | Cod sursa (job #831469) | Cod sursa (job #639069)
Cod sursa(job #639069)
# include <fstream>
using namespace std;
ifstream f("portal3.in");
ofstream g("portal3.out");
int t;
long long n, m;
int nrsol;
long long minim;
long long sol[ 100 ];
int abs( int n )
{
if ( n < 0 )
return -n;
return n;
}
struct portal
{
int x, y, xf, yf, c;
};
portal d[ 6 ];
void afisare();
void rezolva()
{
int i, j, k;
nrsol = 1;
n ++;
m ++;
sol[ 1 ] = ( n - 1 ) + ( m - 1 );
for ( i = 1 ; i <= 3 ; i ++ )
{
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - n ) + abs( d[ i ].yf - m ) + d[ i ].c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - n ) + abs( d[ i ].y - m ) + d[ i ].c;
// g << d[ i ].x - 1 << " " << d[ i ].y - 1 << " " << abs( d[ i ].xf - n ) << " " << abs( d[ i ].yf - m ) << " " << d[ i ].c << "\n";
}
for ( i = 1 ; i <= 3 ; i ++ )
{
for ( j = 1 ; j <= 3 ; j++ )
if ( i != j )
{
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].x ) + abs ( d[ i ].yf - d[ j ].y ) + abs( d[ j ].xf - n ) + abs( d[ j ].yf - m ) + d[ i ].c + d[ j ].c;
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].xf ) + abs ( d[ i ].yf - d[ j ].yf ) + abs( d[ j ].x - n ) + abs( d[ j ].y - m ) + d[ i ].c + d[ j ].c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - d[ j ].x ) + abs ( d[ i ].y - d[ j ].y ) + abs( d[ j ].xf - n ) + abs( d[ j ].yf - m ) + d[ i ].c + d[ j ].c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].xf - d[ j ].xf ) + abs ( d[ i ].yf - d[ j ].yf ) + abs( d[ j ].x - n ) + abs( d[ j ].y - m ) + d[ i ].c + d[ j ].c;
}
}
for ( i = 1 ; i <= 3 ; i++ )
for ( j = 1 ; j <= 3 ; j++ )
for ( k = 1 ; k <= 3 ; k++ )
if ( i != j && i != k && j != k )
{
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].x ) + abs( d[ i ].yf - d[ j ].y ) + abs( d[ j ].xf - d[ k ].x ) + abs( d[ j ].yf - d[ k ]. y ) + abs( d[ k ].xf - n ) + abs( d[ k ].yf - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].x ) + abs( d[ i ].yf - d[ j ].y ) + abs( d[ j ].xf - d[ k ].xf ) + abs( d[ j ].yf - d[ k ]. yf ) + abs( d[ k ].x - n ) + abs( d[ k ].y - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].xf ) + abs( d[ i ].yf - d[ j ].yf ) + abs( d[ j ].x - d[ k ].x ) + abs( d[ j ].y - d[ k ]. y ) + abs( d[ k ].xf - n ) + abs( d[ k ].yf - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].x - 1 ) + ( d[ i ].y - 1 ) + abs( d[ i ].xf - d[ j ].xf ) + abs( d[ i ].yf - d[ j ].yf ) + abs( d[ j ].x - d[ k ].xf ) + abs( d[ j ].y - d[ k ]. yf ) + abs( d[ k ].x - n ) + abs( d[ k ].y - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - d[ j ].x ) + abs( d[ i ].y - d[ j ].y ) + abs( d[ j ].xf - d[ k ].x ) + abs( d[ j ].yf - d[ k ]. y ) + abs( d[ k ].xf - n ) + abs( d[ k ].yf - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - d[ j ].x ) + abs( d[ i ].y - d[ j ].y ) + abs( d[ j ].xf - d[ k ].xf ) + abs( d[ j ].yf - d[ k ]. yf ) + abs( d[ k ].x - n ) + abs( d[ k ].y - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - d[ j ].xf ) + abs( d[ i ].y - d[ j ].yf ) + abs( d[ j ].x - d[ k ].x ) + abs( d[ j ].y - d[ k ]. y ) + abs( d[ k ].xf - n ) + abs( d[ k ].yf - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
nrsol++;
sol[ nrsol ] = ( d[ i ].xf - 1 ) + ( d[ i ].yf - 1 ) + abs( d[ i ].x - d[ j ].xf ) + abs( d[ i ].y - d[ j ].yf ) + abs( d[ j ].x - d[ k ].xf ) + abs( d[ j ].y - d[ k ]. yf ) + abs( d[ k ].x - n ) + abs( d[ k ].y - m ) + d[ i ].c + d[ j ].c + d[ k ]. c;
}
afisare();
//for ( i = 1 ; i <= nrsol ; i++ )
// g << sol[ i ] << "\n";
}
void afisare()
{
int i;
minim = 999999999;
for ( i = 1 ; i < nrsol ; i++ )
if( minim > sol[ i ] )
minim = sol[ i ];
g << minim << "\n";
}
void citire()
{
int i, j;
f >> t;
for ( i = 1 ; i <= t ; i++ )
{
f >> n >> m;
for ( j = 1 ; j <= 3 ; j++ )
f >> d[ j ].x >> d[ j ].y >> d[ j ].xf >> d[ j ].yf >> d[ j ].c;
rezolva();
}
}
int main()
{
citire();
//afisare();
return 0;
}