Cod sursa(job #2835684)

Utilizator VanessaCatanetVanessa Elena Catanet VanessaCatanet Data 19 ianuarie 2022 09:15:21
Problema Carnati Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.22 kb
// https://www.infoarena.ro/problema/carnati

#include <iostream>+
using namespace std;
#include <fstream>

//ofstream fout("carnati.in");
ifstream fin("carnati.in");
ofstream fout("carnati.out");


int main() {


    int cSalariuUnitar, pretFix=0, tTimpl[2001], pIpretMax[2001], nOameni, timpInceput, timpSfarsit, profitUnitar=0;
    int profitTotal=0, pMax=0, timpInceputMin=0, timpSfarsitMax=0, profitTotalMaxim = 0, pretFixOptim = 0, timpInceputOptim = 0, timpSfarsitOptim = 0, varlorileAuFostInitializate = false;


    fin >> nOameni >> cSalariuUnitar;


    for (int i=1; i<=nOameni; i++) {
        fin >> tTimpl[i] >> pIpretMax[i];

        if (i == 1) {
            timpInceputMin = tTimpl[i];
            timpSfarsitMax = tTimpl[i];
            pMax = pIpretMax[i];
        } else {
            if (tTimpl[i] < timpInceputMin) {
                timpInceputMin = tTimpl[i];
            } else if (tTimpl[i] > timpInceputMin) {
                timpSfarsitMax = tTimpl[i];
            }


            if (pIpretMax[i] > pMax) {
                pMax = pIpretMax[i];
            }
        }
    }


    cout << "\n";
    //    timpInceput = timpInceputMin;
    //    timpSfarsit = timpSfarsitMax;
    //


    for (timpSfarsit = timpSfarsitMax; timpSfarsit >= timpInceputMin; timpSfarsit--) {


        for (timpInceput = timpInceputMin; timpInceput <= timpSfarsitMax; timpInceput++) {


            if (timpInceput > timpSfarsit) {
                break;
            }


            // Modificare pret
            for (pretFix = pMax; pretFix > 0; pretFix--) {
                profitTotal  = 0;


                // Calculare profit
                for (int i=1; i<=nOameni; i++) {
                    //        cout << tTimpl[i] << " " << pIpretMax[i]<<" ";
                    //                    int tTimplI = tTimpl[i], pIpretMaxI = pIpretMax[i];
                    profitUnitar = 0;
                    if  (pIpretMax[i] >= pretFix && tTimpl[i] >= timpInceput && tTimpl[i] <= timpSfarsit) {
                        profitUnitar = pretFix;
                    }
                    profitTotal = profitTotal + profitUnitar;
                    //        cout << profitUnitar<<"\n";
                }
                profitTotal = profitTotal - cSalariuUnitar * (timpSfarsit - timpInceput + 1);


//                cout << profitTotal<<" ";


                if (varlorileAuFostInitializate == false) {
                    profitTotalMaxim = profitTotal;
                    pretFixOptim = pretFix;
                    timpInceputOptim = timpInceput;
                    timpSfarsitOptim = timpSfarsit;
                    varlorileAuFostInitializate = true;
                }


                if (profitTotal > profitTotalMaxim) {
                    profitTotalMaxim = profitTotal;
                    pretFixOptim = pretFix;
                    timpInceputOptim = timpInceput;
                    timpSfarsitOptim = timpSfarsit;
                }


            }


        }


    }


    cout << "\n";
    cout << profitTotalMaxim <<", p = "<<pretFix<<", orar: "<<timpInceputOptim<<" - "<<timpSfarsitOptim;
    fout << profitTotalMaxim;
    cout << "\n";
    return 0;
}