Cod sursa(job #3232712)

Utilizator Ana_22Ana Petcu Ana_22 Data 1 iunie 2024 10:07:12
Problema Inundatii Scor 0
Compilator cpp-64 Status done
Runda Simulare E4 #1 Marime 1.14 kb
#include <iostream>
#include <fstream>
#define NMAX 50001

using namespace std;

ifstream fin( "inundatii.in" );
ofstream fout( "inundatii.out" );

struct str {
    int x, y, z;
} c[NMAX][2];

int dp[NMAX][2];

int absv( int a ) {
    return a > 0 ? a : -a;
}

int dist( str a, str b ) {
    return absv( a.x - b.x ) + absv( a.y - b.y ) + absv( a.z - b.z );
}

int main() {
    int n;
    fin >> n;
    for( int i = 1; i <= n; i++ ) {
        fin >> c[i][0].x >> c[i][0].y >> c[i][0].z;
    }
    c[1][1].x = c[1][0].x;
    c[1][1].y = c[1][0].y;
    c[1][1].z = c[1][0].z;
    for( int i = 2; i <= n; i++ ) {
        int d = dist( c[i-1][0], c[i][0] ) + 3;
        int dd = dist( c[i-1][1], c[i][0] ) + 3;
        dp[i][0] = min( dp[i-1][0] + d, dp[i-1][1] + dd );
        dp[i][1] = dp[i][0];
        if( dp[i-1][0] + d < dp[i-1][1] + dd ) {
            c[i][1].x = c[i-1][0].x + 1;
            c[i][1].y = c[i-1][0].y + 1;
            c[i][1].z = c[i-1][0].z + 1;
        }
        else {
            c[i][1].x = c[i-1][1].x + 1;
            c[i][1].y = c[i-1][1].y + 1;
            c[i][1].z = c[i-1][1].z + 1;
        }
    }
    fout << dp[n][0];
    return 0;
}