Cod sursa(job #1758230)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 16 septembrie 2016 20:16:05
Problema Fabrica Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <functional>
using namespace std;
using ll = long long;
using uint = unsigned int;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define NMAX 100010
#define PMAX 50000

int ta[PMAX], tb[PMAX];
int va[NMAX], vb[NMAX];
priority_queue<pii, vector<pii>, greater<pii>> Q;

void solve(int, int, int[], int[]);

int main()
{
	int i, n, nra, nrb, tmax;
	ifstream fin("fabrica.in");
	ofstream fout("fabrica.out");

	fin >> n >> nra >> nrb;
	for (i = 0; i < nra; ++i) fin >> ta[i];
	for (i = 0; i < nrb; ++i) fin >> tb[i];

	solve(n, nra, ta, va);
	solve(n, nrb, tb, vb);

	for (tmax = 0, i = 1; i <= n; ++i) tmax = max(tmax, va[i] + vb[n + 1 - i]);

	fout << va[n] << ' ' << tmax << '\n';

	fin.close();
	fout.close();

	return 0;
}


void solve(int n, int nrProc, int t[], int v[])
{
	while (!Q.empty()) Q.pop();

	for (int i = 0; i < nrProc; ++i) Q.push({t[i], i});

	for (int i = 1; i <= n; ++i)
	{
		pii aux = Q.top();
		Q.pop();

		v[i] = aux.first;

		Q.push({v[i] + t[aux.second], aux.second});
	}
}