Pagini recente » Cod sursa (job #1868275) | Cod sursa (job #798322) | Borderou de evaluare (job #2487150) | Cod sursa (job #58801) | Cod sursa (job #3210293)
#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;
}