Cod sursa(job #810279)

Utilizator dariusdariusMarian Darius dariusdarius Data 10 noiembrie 2012 00:15:12
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
struct MyStruct {int t,p;};
MyStruct a[2005];
int sp[1505];
inline bool MyComp(MyStruct a, MyStruct b)
{
	return a.t<b.t;
}
int main()
{
	freopen("carnati.in","r",stdin);
	freopen("carnati.out","w",stdout);
	int n,c,i,cf,u,max=-2000000000;
	
	//citire, sortare:
	scanf("%d%d",&n,&c);
	for(i=1;i<=n;i++)
		scanf("%d%d",&a[i].t,&a[i].p);
	sort(a+1,a+n+1,MyComp);
	
	//fixare cost:
	
	for(int cc=1;cc<=n;cc++)
	{
	cf=a[cc].p;
	//sume partiale:
	u=1;
	sp[0]=-c;
	while(a[u].t==0)
		if(a[u++].p>=cf)
			sp[0]=sp[0]+cf;
	for(i=1;i<=a[n].t;i++)
	{
		sp[i]=sp[i-1]-c;
		while(a[u].t==i)
			if(a[u++].p>=cf)
				sp[i]=sp[i]+cf;
	}
	
	//gasire rezultat:
	int min=sp[0];
	for(i=0;i<=a[n].t;i++)
		{
		if(sp[i]<min)
			min=sp[i];
		if(sp[i]-min>max)
			max=sp[i]-min;
		}
	}
	printf("%d\n",max);
	return 0;
}