Cod sursa(job #1436888)

Utilizator adystar00Bunea Andrei adystar00 Data 16 mai 2015 16:10:40
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct timp
{
    int t,p;
};
bool cmp (timp x, timp y)
{
    if(x.t<y.t)
        return true;
    else
        return false;
}
timp v[2001];
int n,c;
int calcul (int pret,int n , int c)
{
    int  ultim=0,i,profit,profitmax=-1000001;
    //cout<<"vf "<<pret<<" "<<n<<"\n";
    for(i=1; i<=n; i++)
    {
        //cout<<i<< "";
        if(v[i].p>=pret)
        {
            //cout<<"vf";
            if(ultim==0)
            {
                profit=pret-c;
                ultim =i;
            }
            else
            {
                //cout<<"vf";
                if(profit-c*(v[i].t-v[ultim].t-1)<0)
                    profit=pret-c;
                else
                    profit+=pret-c-c*(v[i].t-v[ultim].t-1);
                ultim=i;
                if(profit>profitmax)
                    profitmax=profit;
            }
            //cout<<profit<<" "<<c<<" "<<i<<" "<<pret<<"\n";
        }
    }
    return profitmax;
}
int main()
{
    ifstream fin ("carnati.in");
    ofstream fout ("carnati.out");
    int n,c,max=-1000001,s=0,i,st,cl;
    fin>>n>>c;
    for(i=1; i<=n; i++)
        fin>>v[i].t>>v[i].p;
    sort(v+1,v+n+1,cmp);
    st=i;
    for(i=1; i<=n; i++)
    {
        cl=calcul (v[i].p,n,c);
        if(cl>max)
            max=cl;
        //cout<<c<<" ";
    }
    if(max>0)
    fout<<max;
    else
    fout<<"0";
    return 0;
}