Cod sursa(job #2834280)

Utilizator icitaVictor Enescu icita Data 16 ianuarie 2022 19:15:06
Problema Carnati Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.3 kb
//
// https://www.infoarena.ro/problema/carnati

#include <iostream>
//#include <bits/stdc++.h>
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, 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;
}