Cod sursa(job #2558642)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 26 februarie 2020 18:31:22
Problema Inundatii Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 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 % 2)
    {
        poz1 = n / 2 + 1;
        poz2 = n / 2 + 1;
    }
    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;
}