Cod sursa(job #585452)

Utilizator devilkindSavin Tiberiu devilkind Data 29 aprilie 2011 15:24:35
Problema Fabrica Scor Ascuns
Compilator cpp Status done
Runda Marime 1.08 kb
#include <stdio.h>
#include <algorithm>
#include <queue>

using namespace std;

#define NMAX 100002

int N, cntA, cntB;
priority_queue< pair<int, int>, vector< pair<int, int> >,
                greater< pair<int, int> > > Q;
int A[NMAX], B[NMAX];
int A1[NMAX], B1[NMAX];

void makeProcList(int V[], int V1[], int L) {
  while (Q.size()) {
    Q.pop();
  }

  for (int i = 1; i <= L; i++) {
    Q.push(make_pair(V[i], V[i]));
  }

  for (int i = 1; i <= N; i++) {
    pair<int, int> top;
    top = Q.top();
    Q.pop();
    V1[i] = top.first;
    top.first += top.second;
    Q.push(top);
  }
}

int main() {
  freopen("fabrica.in", "r", stdin);
  freopen("fabrica.out", "w", stdout);

  scanf("%d %d %d\n", &N, &cntA, &cntB);

  for (int i = 1; i <= cntA; i++) {
    scanf("%d ", &A[i]);
  }

  for (int i = 1; i <= cntB; i++) {
    scanf("%d ", &B[i]);
  }

  makeProcList(A, A1, cntA);
  makeProcList(B, B1, cntB);

  int ret1 = 0, ret2 = 0;
  for (int i = 1; i <= N; i++) {
    ret1 = max(ret1, A1[i]);
    ret2 = max(ret2, A1[i] + B1[N - i + 1]);
  }

  printf("%d %d\n", ret1, ret2);
  return 0;
}