Cod sursa(job #2558657)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 26 februarie 2020 18:38:30
Problema Inundatii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("inundatii.in");
ofstream g("inundatii.out");

int n, i, j;
int x[50001], x1, x2;
int y[50001], y11, y2;
int z[50001], z1, z2;
int poz1, poz2;
long long d;

int dist(int x1, int y11, int z1, int x2, int y2, int z2)
{
    return abs(x1 - x2) + abs(y11 - y2) + abs(z1 - z2);
}

int main()
{
    f >> n;
    for (i=1; i<=n; i++)
        f >> x[i] >> y[i] >> z[i];

    if (n == 1)
    {
        g << 0;
        return 0;
    }

    if (n % 2)
    {
        poz1 = n / 2 + 1;
        poz2 = n / 2 + 1;

        x1 = x2 = x[poz1];
        y11 = y2 = y[poz1];
        z1 = z2 = z[poz1];
    }
    else
    {
        poz1 = n / 2;
        poz2 = n / 2 + 1;

        x1 = (x[poz1] + x[poz2]) / 2 + 1;
        x2 = (x[poz1] + x[poz2]) / 2;

        y11 = (y[poz1] + y[poz2]) / 2 + 1;
        y2 = (y[poz1] + y[poz2]) / 2;

        z1 = (z[poz1] + z[poz2]) / 2 + 1;
        z2 = (z[poz1] + z[poz2]) / 2;

        d += dist(x[poz1], y[poz1], z[poz1], x2, y2, z2);
        d += dist(x[poz2], y[poz2], z[poz2], x1, y11, z1);
    }

    for (i=poz1-1, j=poz2+1; i>0, j<=n; i--, j++)
    {
        x1++, y11++, z1++;
        x2--, y2--, z2--;
        d += dist(x[i], y[i], z[i], x2, y2, z2);
        d += dist(x[j], y[j], z[j], x1, y11, z1);
    }

    g << d;

    return 0;
}