Cod sursa(job #354664)

Utilizator Addy.Adrian Draghici Addy. Data 8 octombrie 2009 23:02:58
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#define DIM 100500
#define INF 4000000000LL

long long LX[DIM], RX[DIM], LY[DIM], RY[DIM], AX[DIM], AY[DIM], BX[DIM], BY[DIM];
long long n, i, dx, dy, x, y, xMAX, yMAX, solY, solX;

int main() {
	
	FILE *f = fopen("tribute.in", "r");
	FILE *g = fopen("tribute.out", "w");
	
	fscanf(f, "%d %d %d", &n, &dx, &dy);
	
	for (i = 1; i <= n; i++) {
		fscanf(f, "%d %d", &x, &y);
		AX[x]++, AY[y]++;
		if (x > xMAX)
			xMAX = x;
		if (y > yMAX)
			yMAX = y;
	}
	
	BX[0] = AX[0];
	for (i = 1; i <= xMAX; i++)
		BX[i] = BX[i-1] + AX[i];
	BY[0] = AY[0];
	for (i = 1; i <= yMAX; i++)
		BY[i] = BY[i-1] + AY[i];
	
	for (i = 1; i <= xMAX; i++)
		LX[i] = LX[i-1] + BX[i-1];
	for (i = 1; i <= yMAX; i++)
		LY[i] = LY[i-1] + BY[i-1];
	
	for (i = xMAX-1; i >= 0; i--)
		RX[i] = RX[i+1] + BX[xMAX] - BX[i];
	for (i = yMAX-1; i >= 0; i--)
		RY[i] = RY[i+1] + BY[yMAX] - BY[i];
	
	solX = solY = INF;
	
	for (i = 0; i <= xMAX; i++)
		if (LX[i] + RX[i+dx] < solX)
			solX = LX[i] + RX[i+dx];
	for (i = 0; i <= yMAX; i++)
		if (LY[i] + RY[i+dy] < solY)
			solY = LY[i] + RY[i+dy];

	fprintf(g, "%d", solX + solY);
	
	fclose(f);
	fclose(g);
	
	return 0;
}