Cod sursa(job #1852666)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 21 ianuarie 2017 01:16:59
Problema Tribute Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#define COORDONATE 50001

int x[COORDONATE], y[COORDONATE];
int stx[COORDONATE], drx[COORDONATE];
int sty[COORDONATE], dry[COORDONATE];

int main() {
    FILE *fin, *fout;
    int n, dx, dy, i, dist, xi, yi, sx, sy;
    long long minx, miny;
    fin = fopen( "tribute.in", "r" );
    fout = fopen( "tribute.out", "w" );
    fscanf( fin, "%d%d%d", &n, &dx, &dy );
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d%d", &xi, &yi );
        x[xi]++;
        y[yi]++;
    }
    sx = 0;
    sy = 0;
    for ( i = 1; i < COORDONATE; i++ ) {
        sx += x[i-1];
        sy += y[i-1];
        stx[i] = stx[i-1] + sx;
        sty[i] = sty[i-1] + sy;
    }
    sx = 0;
    sy = 0;
    for ( i = COORDONATE - 2; i >= 0; i-- ) {
        sx += x[i+1];
        sy += y[i+1];
        drx[i] = drx[i+1] + sx;
        dry[i] = dry[i+1] + sy;
    }
    minx = stx[0] + drx[dx];
    for ( i = 0; i < COORDONATE - dx; i++ ) {
        if ( minx > stx[i] + drx[i+dx] )
            minx = stx[i] + drx[i+dx];
    }
    miny = sty[0] + dry[dy];
    for ( i = 0; i < COORDONATE - dy; i++ ) {
        if ( miny > sty[i] + dry[i+dy] )
            miny = sty[i] + dry[i+dy];
    }
    fprintf( fout, "%lld", minx + miny );
    fclose( fin );
    fclose( fout );
    return 0;
}