Cod sursa(job #128009)

Utilizator floringh06Florin Ghesu floringh06 Data 25 ianuarie 2008 19:55:50
Problema Inundatii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <cstdio>
#include <cstring>
#include <cmath>
#include <fstream>

using namespace std;

#define FIN "inundatii.in"
#define FOUT "inundatii.out"
#define MAX_N 50005

typedef struct 
{
        int x, y, z;
} point;

point A[MAX_N];
long long B[MAX_N];

int N, i;
long long best;

    void solve ( void )
    {
         int i;
         for (i = 1; i <= N; ++i)
             B[i] = A[i].x - i;
         int mediana = B[(N + 1)/2];
         for (i = 1; i <= N; ++i)
             B[i] = (long long)mediana + i;
         for (i = 1; i <= N; ++i)
             best += (long long) labs (B[i] - A[i].x);
         
         for (i = 1; i <= N; ++i)
             B[i] = A[i].y - i;
         mediana = B[(N + 1)/2];
         for (i = 1; i <= N; ++i)
             B[i] = (long long)mediana + i;
         for (i = 1; i <= N; ++i)
             best += (long long) labs (B[i] - A[i].y);
         
         for (i = 1; i <= N; ++i)
             B[i] = A[i].z - i;
         mediana = B[(N + 1)/2];
         for (i = 1; i <= N; ++i)
             B[i] = (long long)mediana + i;
         for (i = 1; i <= N; ++i)
             best += (long long) labs (B[i] - A[i].z);    
         printf ("%lld\n", (long long) best);
    } 

    int main ()
    {
        freopen (FIN, "r", stdin);
        freopen (FOUT, "w", stdout);
        
        scanf ("%d", &N);
        for (i = 1; i <= N; ++i)
            scanf ("%d %d %d", &A[i].x, &A[i].y, &A[i].z);
        
        solve ();
        
        return 0;
    }