Cod sursa(job #1204385)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 2 iulie 2014 19:57:18
Problema Inundatii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>

#define NMAX 50005
using namespace std;

int n;
long long int vx[NMAX];
long long int vy[NMAX];
long long int vz[NMAX];
long long int v[NMAX];

long long int dinst[NMAX];
long long int dindr[NMAX];

inline long long int calc()
{
    long long int i;

    dinst[1]=0;
    for(i=2;i<=n;i++)
        dinst[i]=dinst[i-1]+1ll*(v[i-1]-v[i])*(i-1);
    for(i=2;i<=n;i++)
        dinst[i]+=(((i-1ll)*i)/2);

    dindr[n]=0;
    for(i=n-1;i>=1;i--)
        dindr[i]=dindr[i+1]+1ll*(v[i]-v[i+1])*(n-i);
    for(i=n-1;i>=1;i--)
        dindr[i]+=(((n-i+1ll)*(n-i))/2);

    long long int minim=dinst[1]+dindr[1];
    for(i=2;i<=n;i++)
        if((dinst[i]+dindr[i])<minim)
            minim=dinst[1]+dindr[1];
    return minim;
}

int main()
{
    ifstream cin("inundatii.in");
    ofstream cout("inundatii.out");

    int i;
    cin>>n;

    for(i=1;i<=n;i++)
        cin>>vx[i]>>vy[i]>>vz[i];

    long long int sol=0;
    for(i=1;i<=n;i++)
        v[i]=vx[i];
    sol+=calc();

    for(i=1;i<=n;i++)
        v[i]=vy[i];
    sol+=calc();

    for(i=1;i<=n;i++)
        v[i]=vz[i];
    sol+=calc();

    cout<<sol<<'\n';

    cin.close();
    cout.close();
    return 0;
}