Cod sursa(job #642501)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 1 decembrie 2011 15:52:42
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <string.h>
#define NMAX 50000

const int INF = 0x3f3f3f3f;
int a[NMAX + 50], b[NMAX + 50],xmin,xmax,ymin,ymax;

int solve(int *v, int d, int n,int l,int r)
{
	int i, sum = 0;
	for (i = d+l; i <= r; ++i)
		sum += (i - d) * v[i];
	
	int min = sum;
	for (i = 1+l; i <= r; ++i) 
		v[i] += v[i - 1];
	
	for (i = 1+l; i + d <= r; ++i) {
		sum += v[i - 1];
		sum -= n - v[i + d - 1];
		if (sum < min)
			min = sum;
	}
	return min;
}

int main()
{
	freopen("tribute.in", "r", stdin);
	freopen("tribute.out", "w", stdout);
	int n, dx, dy, i, x, y;
	scanf("%d %d %d", &n, &dx, &dy);
	for (i = 0; i < n; ++i) {
		scanf("%d %d", &x, &y);
		{
		if(x<xmin) xmin=x;
		if(x>xmax) xmax=x;
		if(y<ymin) ymin=y;
		if(y>ymax) ymax=y;
		}
		++a[x];
		++b[y];
	}
	
	printf("%d\n", solve(a, dx, n,xmin,xmax) + solve(b, dy, n,ymin,ymax));
	return 0;
}