Cod sursa(job #1781349)

Utilizator silkMarin Dragos silk Data 16 octombrie 2016 20:11:58
Problema Inundatii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#define NMax 50000
#define ll long long
#define ABS(x)((x)>0?(x):(-(x)))
#define MIN(a,b)((a)<(b)?(a):(b))

int x[3][NMax+1];
int N;

ll cost(int v, int c, int l)
{
    int i,t;
    ll ans = ABS(x[l][c]-v);

    for(t = v-1, i = c-1; i >= 1; --i,--t) ans += ABS(x[l][i]-t);
    for(t = v+1, i = c+1; i <= N; ++i,++t) ans += ABS(x[l][i]-t);

    return ans;
}

ll get_min(int l)
{
    int i;
    ll ans,sum = 0;

    sum = x[l][N/2];

    ans = cost(sum,N/2,l);
    ans = MIN( ans, cost(sum,N/2+1,l) );
    --sum;
    ans = MIN( ans, cost(sum,N/2,l) );
    ans = MIN( ans, cost(sum,N/2+1,l) );
    sum += 2;
    ans = MIN( ans, cost(sum,N/2,l) );
    ans = MIN( ans, cost(sum,N/2+1,l) );

    return ans;
}

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

    int i,j;

    scanf("%d",&N);
    for(i = 1; i <= N; ++i)
        for(j = 0; j < 3; ++j) scanf("%d",&x[j][i]);

    printf("%lld\n", get_min(0) + get_min(1) + get_min(2) );



return 0;
}