Cod sursa(job #2313305)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 6 ianuarie 2019 16:52:47
Problema Carnati Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
/// TONI BO$$ was here
/// #MLC

using namespace std;

struct carnat
{
    int tp,pret;
    bool operator <(const carnat &other) const
    {
        return tp<other.tp;
    }
};

carnat v[2001];

int main()
{
    int n,c,i,ssm,val,smax,s,p,j;
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);
    scanf("%d%d",&n,&c);
    for(i=1; i<=n; i++)
        scanf("%d%d",&v[i].tp,&v[i].pret);
    sort(v+1,v+1+n);
    ssm=0;
    v[0].tp=v[1].tp;
    for(i=1; i<=n; i++)
    {
        val=v[i].pret;
        smax=s=0;
        for(j=1; j<=n; j++)
            if(v[j].pret>=val)
            {
                s=smax=val;
                p=j;
                break;
            }
        s-=c;
        smax-=c;
        for(++j; j<=n; j++)
            if(v[j].pret>=val)
            {
                if(s-(v[j].tp-v[p].tp)*c+c<0)
                    s=val-c;
                else
                    s+=val-(v[j].tp-v[p].tp)*c;
                p=j;
                if(smax<s)
                    smax=s;
            }
        ssm=max(ssm,smax);
    }
    printf("%d",ssm);

    return 0;
}