Cod sursa(job #537022)

Utilizator razyelxrazyelx razyelx Data 19 februarie 2011 21:29:31
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream.h>
#include <algorithm>
#define N 2010

using namespace std;

ifstream fin("carnati.in");
ofstream fout("carnati.out");

struct C{
	int t;
	int p;
} client[N];

int n,c,best = -int(2e9);

void read(){
	int i;
	
	fin>>n>>c;
	
	for (i=1; i<=n; i++)
		fin>>client[i].t>>client[i].p;

}
int cmp(C x, C y){
	return x.t < y.t;
}

void dinamica(int pFixat){
	int i,sum = 0, pi; // pi este pretul de la i. care poate fi chiar pretul clientului sau 0
	
	client[0].t = client[1].t-1;
	
	for (i=1;i<=n;i++){
		
		if (client[i].p >= pFixat) pi = pFixat;
		else pi = 0;

		if (sum + pi - (client[i].t-client[i-1].t)*c < pi-c)
			sum = pi-c;
		else
			sum += pi - (client[i].t-client[i-1].t)*c;
		
		if (sum > best) best = sum;
	}
			
		
}

void solve(){
	for (int i=1; i<=n; i++)
		dinamica(client[i].p);
}

int main(){
	
	read();
	sort(client+1,client+n+1,cmp);
	solve();
	
	
	fout<<best;
	
	return 0;
}