Cod sursa(job #626699)

Utilizator ZexonAvramita Teodor Zexon Data 27 octombrie 2011 22:30:37
Problema Carnati Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.64 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
ifstream in("carnati.in");
ofstream out("carnati.out");
const int a = 1500;
int chart[1500];
int Start =0;
int Stop =0;
int profit =0;
int summax()
{
    int suma=0;
    int sumamax = -9999999;
        for (int i =0; i<1500;i++)

    {
        if(suma<0)
        {
            suma =0;
        }
        suma += chart[i];
        if(suma> sumamax)
        {
            sumamax = suma;
        }
    }
    return sumamax;
}

int betterS()
{
    int start =0;
    int suma=0;
    int startmax=0;
    int stiop=0;
    int sumamax = -9999999;

    for (int i =0; i<a;i++)

    {
        if(suma<0)
        {
            suma =0;
            start = i;
        }
        suma += chart[i];

        if(suma> sumamax)
        {
            sumamax = suma;
            startmax = start;
            stiop = i;
        }
    }
    Start = startmax;
    Stop = stiop+1;
}


int main()
{
    int min=0;
    int max=0;
    int profitmax =0;
    int profitreal =0;
    int pretmax;
    int start =0;
    string tmp;
    in>>tmp;
    int clienti = atoi(tmp.c_str());
    in>>tmp;
    int paguba = atoi(tmp.c_str());
    int timpi[clienti];
    int preturi[clienti];
    //// aci citesc vectori
    for (int i=0; i<clienti ;i++ )
        {
            in>>tmp;
            timpi[i] = atoi(tmp.c_str());
            in>>tmp;
            preturi[i] = atoi(tmp.c_str());
        }

    //// aici generez charturi
    for (int i=0; i<clienti ;i++ )
        {
            for (int j=0; j<clienti ;j++ )
                {

                  for (int q=start; q<timpi[j] ;q++ )
                    {
                        if(preturi[i]> preturi[j])
                        {
                            //debug
                            //out<< preturi[i] << " "<<preturi [j]<< " "<< q<<endl;
                            ////
                            chart[q] = -paguba;
                        }
                        else chart[q]=(preturi[i]/(timpi[j]-start))-paguba;
                    }
                  start = timpi[j];
                }
            start =0;
            ///debug
     ///       for (int i=0; i<1500 ;i++ )
     ///           out<<chart[i]<<" ";
     ///       out<<endl;
            ///debug
            //profit = summax();
            betterS();
            for (int f=Start; f<=Stop ;f++ )
                {

                   for(int j =0;j<clienti;j++)
                        if((timpi[j]== f)&&(preturi[j]>=preturi[i]))
                            {
                           ///      out<< " f "<<f<<endl;
                                if(min == 0)min=f;
                                if (f>max) max =f;
                                if(f<min) min =f;
                                profit += preturi[i];

                                //break;
                            }

                }
            profit -= paguba*(max-min+1);
             min =0;
             max =0;
       ///     out<<preturi[i] << " "<<profit<< endl;
            //profit -= paguba*(Stop -Start +1);
            if(profit > profitmax)
                {
                profitmax = profit;
                //debug
          ///      out<< " prezu max e"<<preturi[i] <<endl;
               // profitreal = i;
                ////
               // pretmax = preturi[i];
            ///   out << Start<< " "<< Stop<< endl;
                }
            profit =0;
        }

   out<<profitmax;
    //out<< endl<<endl<<endl<< preturi[1]<< " "<<preturi[0];
    return 0;
}