Cod sursa(job #1703745)

Utilizator cella.florescuCella Florescu cella.florescu Data 17 mai 2016 16:38:56
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <cstdio>
#define MAXN 50000
#define INF 2000000000

using namespace std;

int xspate[MAXN+5], xfata[MAXN+5], yspate[MAXN+5], yfata[MAXN+5];

#define xspate (xspate+2)
#define xfata (xfata+2)
#define yspate (yspate+2)
#define yfata (yfata+2)

int main()
{
    FILE *fin, *fout;
    int n, dx, dy, i, x, y, minx, miny;
    fin=fopen("tribute.in", "r");
    fscanf(fin, "%d%d%d", &n, &dx, &dy);
    for(i=0; i<n; i++){
      fscanf(fin, "%d%d", &x, &y);
      xspate[x]++;
      xfata[x]++;
      yspate[y]++;
      yfata[y]++;
    }
    fclose(fin);
    for(i=0; i<=MAXN; i++){
      xspate[i]+=xspate[i-1];
      yspate[i]+=yspate[i-1];
    }
    for(i=0; i<=MAXN; i++){
      xspate[i]+=xspate[i-1];
      yspate[i]+=yspate[i-1];
    }
    for(i=MAXN; i>=0; i--){
      xfata[i]+=xfata[i+1];
      yfata[i]+=yfata[i+1];
    }
    for(i=MAXN; i>=0; i--){
      xfata[i]+=xfata[i+1];
      yfata[i]+=yfata[i+1];
    }
    minx=miny=INF;
    for(i=0; i<=MAXN; i++){
      if(i+dx<=MAXN+2 && xspate[i-1]+xfata[i+dx+1]<minx)
        minx=xspate[i-1]+xfata[i+dx+1];
      if(i+dy<=MAXN+2 && yspate[i-1]+yfata[i+dy+1]<miny)
        miny=yspate[i-1]+yfata[i+dy+1];
    }
    fout=fopen("tribute.out", "w");
    fprintf(fout, "%d\n", minx+miny);
    fclose(fout);
    return 0;
}