Cod sursa(job #368649)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 25 noiembrie 2009 12:12:57
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct inter
{
    int t,p;
};
inter v[2001];
int n,c,maxim;
int maxx(int a, int b)
{
    if(a>b) return a;
    return b;
}
bool comp(const inter &a, const inter &b)
{
    if(a.t>b.t) return false;
    return true;
}
int profit(int pret)
{
    int i,sc,smax;
    if(v[1].p>=pret)
        sc=smax=pret-c;
    else sc=smax=-c;
    for(i=2;i<=n;i++)
    {
        if(sc<(v[i].t-v[i-1].t-1)*c)
            sc=0;
        else
            sc-=(v[i].t-v[i-1].t-1)*c;
        if(v[i].p>=pret)
            sc+=pret;
        sc-=c;
        smax=maxx(smax,sc);
    }
    return smax;
}

int main()
{
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);
    scanf("%d%d",&n,&c);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&v[i].t,&v[i].p);
    sort(v+1,v+n+1,comp);
    int i,j;
    for(i=1;i<=n;i++)
        maxim=maxx(maxim,profit(v[i].p));
    printf("%d",maxim);
    return 0;
}