Cod sursa(job #392663)

Utilizator loginLogin Iustin Anca login Data 7 februarie 2010 23:41:42
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
# include <fstream>
# include <iostream>
using namespace std;
int n, c, t[2003], p[2003], pmax=-1000000;

void afis (int v[], int n)
{
	for (int i=1;i<=n;i++)
		cout<<v[i]<<" ";
	cout<<endl;
}

void read ()
{
	ifstream fin ("carnati.in");
	fin>>n>>c;
	for (int i=1;i<=n;i++)
		fin>>t[i]>>p[i];
}

void qsort (int st, int dr)
{
	if (st<dr)
	{
		int i=st, j=dr, d=0, aux;
		while (i<j)
		{
			if (t[i]>t[j])
			{
				aux=t[i];t[i]=t[j];t[j]=aux;
				aux=p[i];p[i]=p[j];p[j]=aux;
				d=1-d;
			}
			i+=d;
			j-=1-d;
		}
		qsort (st, i-1);
		qsort (i+1, dr);
	}
}

void calcul (int p, int t[], int n)
{
	int pr=p-c, tt=t[1];
	for (int i=2;i<=n;i++)
	{
		if (pr+p-(t[i]-tt)*c>p-c)
			pr=pr+p-(t[i]-tt)*c, tt=t[i];
		else
			pr=p-c, tt=t[i];
		if (pr>pmax)
			pmax=pr;
	}
}

void solve ()
{
	int x[2003], m;
	for (int i=1;i<=n;i++)
	{
		m=0;
		for (int j=1;j<=n;j++)
			if (p[j]>=p[i])
				x[++m]=t[j];
		calcul (p[i], x, m);
	}
}

int main ()
{
	read ();
	qsort (1, n);
	solve ();
	ofstream fout ("carnati.out");
	fout<<pmax;
	return 0;
}