Cod sursa(job #844380)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 29 decembrie 2012 03:32:47
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <cassert>
#include <algorithm>
#define dim 2005
 
using namespace std;
int n=0,c=0;
 
struct str
{
    int t,p;
};
str v[dim];
 
bool comp(str x,str y)
{
    return x.t<y.t;
}
 
int gain(int value, int k)
{
    int i=1,gmax=0,s=0,ind= 0;
 
    for(i=1; i<=n; ++i)
    {
        if (v[i].p<value)
            continue;
 
        s=s-c*(v[i].t-v[ind].t-1);
        ind=i;
 
        if (s<0)
            s=0;
 
        s=s+value-c;
 
        if (s>gmax)
            gmax=s;
    }
 
    return gmax;
}
 
int main()
{
    int i=0;
    long long nr=0,max=0;
 
    assert(freopen("carnati.in","r",stdin));
    assert(freopen("carnati.out","w",stdout));
 
    assert(scanf("%d%d",&n,&c));
    for (i=1; i<=n; ++i)
        assert(scanf("%d%d",&v[i].t,&v[i].p));
 
    sort(v+1,v+n+1,comp);
 
    v[0].t= -1;
    for (i=1; i<=n; ++i)
    {
        nr=gain(v[i].p,i);
        if (nr>max)
            max=nr;
    }
 
    assert(printf("%lld",max));
 
    return 0;
}