Cod sursa(job #2317077)

Utilizator cristicioteiCiotei Cristian cristiciotei Data 12 ianuarie 2019 19:16:54
Problema Carnati Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,C;
struct client
{
    int timp,bani;
};
client clien[2001];
int min1=1000001,max1=-1;
int sol=0;
int profit;
int profi(int val)
{
    int profit_p=0;
    int stat=clien[1].timp-1;
    int maxim_l=0;
    for (int i=1 ; i<=n ; i++)
    {
        if (clien[i].bani>=val)
             profit_p+=val;
        profit_p-=C*(clien[i].timp-stat);
        stat=clien[i].timp;
        if (maxim_l<profit_p)
            maxim_l=profit_p;
        if (profit_p<0)
        {
            profit_p=0;
            stat=clien[i+1].timp-1;
        }

    }
    return maxim_l;
}
int main()
{
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);
   cin>>n>>C;
   for (int i=1 ; i<=n ; i++)
   {
       cin>>clien[i].timp>>clien[i].bani;
       if (min1>clien[i].bani)
        min1=clien[i].bani;
       if (max1<clien[i].bani)
        max1=clien[i].bani;
   }
   int st=min1,dr=max1;
   while (st<=dr)
   {
       int mij=(st+dr)/2;
       profit=profi(mij);
       if (profit>sol)
       {
           st=mij+1;
           sol=profit;
       }
       else
       {
           dr=mij-1;
       }
   }
   cout<<sol;
    return 0;
}