Cod sursa(job #3210293)

Utilizator alexandraiacobelAlexandra Iacob alexandraiacobel Data 5 martie 2024 21:09:26
Problema Fabrica Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <bits/stdc++.h>
using namespace std;
#define curent first
#define aparat second

ifstream fin("fabrica.in");
ofstream fout("fabrica.out");
const int Nmax= 100005;
priority_queue<int> qa,qc;
priority_queue<pair<int,int>> qb;
int n,A,a[Nmax],B,x, b[Nmax],i,j;
//In heap-uri NU voi pastra timpurile pt fiecare procesor valabil, ci voi pastra, attention,
//voi pastra timpul estimat de procesare al obiectului i. Daca un obiect e ales ca sa fie folosit, atunci in queue, pt acel procesor tocmai ales, noi stim
//ca ca obiectul i+1 sa il foloseasca va trb sa il astepte pe i sa se termine, deci timpul j, si apoi inca j ca sa se termine si acel (i+1) ... deci 2j
//ATENTIE! Poate fi un procesor caruia ii dureaza 700000 de secunde si de-asta nu e bine sa il luam pe primul liber, uneori mai bine le asteptam pe alea cele mai rapide

int main()
{
    fin>>n>>A>>B;

    for(i=1; i<=A;i++)
    {
        fin>>x;
        qa.push(-x); //pun cu - ca prioritate sa aiba alea mici

    }
    for(i=1; i<=B;i++)
        {
            fin>>x;
             qb.push({-x,-x}); //al 2-lea va fi o constanta ca altfel voi incepe sa uit eficienta fiecarui procesor
        }

    //Pun fiecare obiect in procesorul A
    for(i=1; i<=n;i++)
    {
        int proces = qa.top();
        qa.pop();

        qc.push(proces); //acesta e un queue care pune in ordine cum ies obiectele din A,simplu
        //nr deja e negativ
        qa.push(proces + proces);//dublez. ESTIMAREA

        if(i==n) fout<<-(proces)<<' '; //finalizarea si a ultimul obiect
    }

    //Acum in procesorul B
    for(i=1; i<=n; i++)
    {
        pair<int,int> proces = qb.top();
        qb.pop();

        int obiect_timp = qc.top(); //banda de iesire din A
        qc.pop();

        qb.push({obiect_timp + proces.curent + proces.aparat, proces.aparat}); //ESTIMAREA
        proces = qb.top();

        if(i==n) fout<< -(proces.aparat + obiect_timp)<<' ';
    }

    return 0;
}