Pagini recente » Cod sursa (job #2956454) | Cod sursa (job #1032738) | Cod sursa (job #1334678) | Cod sursa (job #358087) | Cod sursa (job #595319)
Cod sursa(job #595319)
#include <stdio.h>
#define file_input "tribute.in"
#define file_output "tribute.out"
#define N_MAX 50000
#define VEC_LEN (N_MAX+1)
int N, DX, DY, LIN[VEC_LEN], COL[VEC_LEN];
int Sld[VEC_LEN], Sru[VEC_LEN];
int main ( void ) {
FILE* fin = fopen(file_input,"r");
FILE* fout = fopen(file_output,"w");
fscanf(fin,"%d %d %d", &N, &DX, &DY);
int i, x, y;
for (i=0;i<N;++i) {
fscanf(fin,"%d %d", &x, &y);
COL[x]++;
LIN[y]++;
}
fclose(fin);
int count = COL[0];
for (i=1;i<=N_MAX;++i) {
Sld[i] = Sld[i-1] + count;
count += COL[i];
}
count = COL[N_MAX];
for (i=N_MAX-1;i>=0;--i) {
Sru[i] = Sru[i+1] + count;
count += COL[i];
}
int minX = Sld[0]+Sru[DX];
// printf("%d\n", Sru[DX]);
for(i=1;i<=N_MAX-DX;++i)
if(Sld[i]+Sru[i+DX] < minX) minX = Sld[i]+Sru[i+DX];
for(i=0;i<=N_MAX;++i) {
Sld[i]=0;
Sru[i]=0;
}
count = LIN[0];
for(i=1;i<=N_MAX;++i) {
Sld[i] = Sld[i-1] + count;
count += LIN[i];
}
count = LIN[N_MAX];
for(i=N_MAX-1;i>=0;--i) {
Sru[i] = Sru[i+1] + count;
count += LIN[i];
}
int minY = Sld[0] + Sru[DY];
for(i=1;i<=N_MAX-DY;++i)
if(Sld[i] + Sru[i+DY] < minY) minY = Sld[i] + Sru[i+DY];
fprintf(fout,"%d\n", minX + minY);
fclose(fout);
return 0;
}