Cod sursa(job #326236)

Utilizator savimSerban Andrei Stan savim Data 24 iunie 2009 13:12:45
Problema Carnati Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define MAX_N 2048

int n, m, c, i, j, sol;
int V[2 * MAX_N];

struct customer {
	int t;
	int pret;
} A[MAX_N];


void cit() {
	freopen("carnati.in", "r", stdin);
	freopen("carnati.out", "w", stdout);

	scanf("%d %d", &n, &c);
	for (i = 1; i <= n; i++)
		scanf("%d %d", &A[i].t, &A[i].pret);
}

inline int cmp(customer P, customer Q) {
	return P.t < Q.t;
}

void solve() {
    sort(A + 1, A + n + 1, cmp);
	
	for (i = 1; i <= n; i++) {
		//fixez pretul carnatului i
		m = 0;
		for (j = 1; j <= n; j++) {
			if (A[j].pret >= A[i].pret)
				V[++m] = A[i].pret - c;
			else 
				V[++m] = -c;
			if (j < n && A[j + 1].t != A[j].t)
				V[++m] = -(A[j + 1].t - A[j].t - 1) * c;
		}                
	
    	//subsecventa de suma maxima, vad cat obtin
    	int sum = 0;
		for (j = 1; j <= m; j++) {
			if (sum + V[j] >= 0)
				sum += V[j];
			else sum = 0;
			
			if (sum > sol) sol = sum;
		}
	}
	
	printf("%d\n", sol);	
}

int main() {

	cit();
	solve();

	return 0;
}