Cod sursa(job #586520)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 2 mai 2011 11:06:17
Problema Fabrica Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <queue>
#define PII pair <int, int> 

using namespace std;

const int NM = 100005;

int N, reza[NM], rezb[NM];

priority_queue <PII, vector <PII>, greater <PII> > A, B;

void read() {
  int x, Na, Nb;
  freopen("fabrica.in", "r", stdin);
  freopen("fabrica.out", "w", stdout);

  scanf("%d%d%d", &N, &Na, &Nb);
  
  for (int i = 1; i <= Na; ++ i) {
    scanf("%d", &x);
    A.push(make_pair(x, x));
  }

  for (int i = 1; i <= Nb; ++ i) {
    scanf("%d", &x);
    B.push(make_pair(x, x));
  }
}

void solve_a() {
  PII sus;
  
  for (int i = 1; i <= N; ++ i) {
    sus = A.top();
    A.pop();
    reza[i] = sus.first;
    A.push(make_pair(sus.first + sus.second, sus.second));
  }

  printf("%d ", reza[N]);
}

void solve_b() {
  PII sus;

  for (int i = 1; i <= N; ++ i) {
    sus = B.top();
    B.pop();
    rezb[i] = sus.first;
    B.push(make_pair(sus.first + sus.second, sus.second));
  }

  int rez = - 1;

  for (int i = 1; i <= N; ++ i)
    if (reza[i] + rezb[N - i + 1] > rez)
      rez = reza[i] + rezb[N - i + 1];

  printf("%d", rez);
}

int main() {
  read();
  solve_a();
  solve_b();
  return 0;
}