Cod sursa(job #2888558)

Utilizator sincasilviuSinca Silviu-Gabriel sincasilviu Data 11 aprilie 2022 16:14:27
Problema Branza Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <deque>

std::ifstream fin("branza.in");
std::ofstream fout("branza.out");

int main() {
    int N, S, T, cost, cantitate;
    std::deque<std::pair<int, int>> deq; // deque facut din pair de zi si cost;

    fin >> N >> S >> T; // n nr zile; s cost de depozitare; t timp cat de mult poate depozita;

    int cost_minim = 0;

    for (int zi = 0; zi < N; zi++) {
        fin >> cost >> cantitate;
//        int costDepozitare = S * (zi - deq.back().first) + deq.back().second;
        while (!deq.empty() && (cost < S * (zi - deq.back().first) + deq.back().second)) {
//            std::cout << deq.back().first << '\n';
            deq.pop_back();
        }

        deq.emplace_back(std::make_pair(zi,cost));

        if (deq.front().first < zi - T) {
            deq.pop_front();
        }
//        std::cout << deq.front().first << ' ' << deq.front().second << '\n';

//        for (auto el : deq)
//            std::cout << el.first << ' ' << el.second << '\n';
//        std::cout<< "===========\n";

        cost_minim += (S * (zi - deq.front().first) + deq.front().second) * cantitate;
//        zi++;
    }

//    for (auto el : deq)
//        std::cout << el.first << ' ' << el.second << '\n';

    fout << cost_minim;
//    std::cout << cost_minim;

    return 0;
}