Cod sursa(job #2703586)

Utilizator NastureNasture Anca Nasture Data 8 februarie 2021 19:45:23
Problema Carnati Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include<algorithm>

using namespace std;

ifstream cin("carnati.in");
ofstream cout("carnati.out");

struct ura
{
    int ora,pret;
};

ura v[2001];
long long cost[2001];

bool cmp (ura a, ura b)
{
    if(a.ora < b.ora)
        return true;
    return false;
}


int main()
{
    long long profit,p,s;
    int n,C,w,i;
    cin>>n>>C;
    for(i=1;i<=n;i++)
        cin>>v[i].ora>>v[i].pret;
    sort(v+1,v+n+1,cmp);
    profit=-2000000000000000;
    for(w=1;w<=n;w++)
    {
        p=v[w].pret;

        for(i=1;i<=n;i++)
            if(v[i].pret<p)
                if(i==1)
                    cost[i]=-C;
                else
                    cost[i]=-(v[i].ora-v[i-1].ora) *C;
            else
                if(i==1)
                    cost[i]=p-C;
                else
                    cost[i]=p-(v[i].ora-v[i-1].ora) *C;
        s=0;int inc=1,incf;
        long long maxi=-2000000000000000;
        for(i=1;i<=n;i++)
        {
            if(s<0)
            {
                inc=i;
                s=0;
            }
            s+=cost[i];
            if(s>maxi)
            {
                maxi=s;
                incf=inc;
            }
        }
        if(incf==1)
            {
            }
        else
            maxi+=(v[incf].ora-v[incf-1].ora-1)*C;
        if(maxi>profit)
            profit=maxi;
    }
    cout<<profit;



    return 0;
}