Cod sursa(job #125099)

Utilizator devilkindSavin Tiberiu devilkind Data 20 ianuarie 2008 11:22:24
Problema Inundatii Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 10-a Marime 0.85 kb
#include <stdio.h>
#include <vector>

using namespace std;

#define NMAX 50002
#define pb push_back
#define sz size

long long st[NMAX],dr[NMAX];
long int i,j,k,n,m;
long long sol;

vector<int> x,y,z;

void DP(vector<int> v)
{
st[0]=0;
st[1]=0;
for (i=2;i<=n;i++)
        st[i]=st[i-1]+(v[i-1]-v[i]+1)*(i-1);

dr[n]=0;
dr[n+1]=0;
for (i=n-1;i;i--)
        dr[i]=dr[i+1]+(v[i]-v[i+1]+1)*(n-i);
long long ret;
ret=dr[1]+st[1];
for (i=1;i<=n;i++)
        if (dr[i]+st[i]<ret) ret=dr[i]+st[i];
sol=sol+ret;
}

int main()
{

freopen("inundatii.in","r",stdin);
freopen("inundatii.out","w",stdout);

scanf("%ld",&n);
x.pb(-50002);
y.pb(-50002);
z.pb(-50002);

for (i=1;i<=n;i++)
        {
        scanf("%ld",&k);
        x.pb(k);
        scanf("%ld",&k);
        y.pb(k);
        scanf("%ld",&k);
        z.pb(k);
        }

DP(x);
DP(y);
DP(z);

printf("%lld",sol);
return 0;
}