Cod sursa(job #2370121)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 6 martie 2019 10:47:58
Problema Fabrica Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

typedef std::pair<int, int> pii  ;

const int NM = 100005 ;

std::priority_queue< pii, std::vector< pii >, std::greater< pii > > heaps ;
int umplu[NM], capac[NM], a[NM], b[NM], i, n, A, B, ans = -1 ;
pii tp ;

int main() {
  freopen("fabrica.in", "r", stdin) ;
  freopen("fabrica.out", "w", stdout) ;
  scanf("%d%d%d", &n, &A, &B) ;
  for (i = 1 ; i <= A ; ++ i)
    scanf("%d", &a[i]) ;
  for (i = 1 ; i <= B ; ++ i)
    scanf("%d", &b[i]) ;
  for (i = 1 ; i <= A ; ++ i)
    heaps.push({a[i], i }) ;
  for (i = 1 ; i <= n ; ++ i) {
    tp = heaps.top() ;
    umplu[i] = tp.first ;
    heaps.push({umplu[i] + a[tp.second], tp.second }) ;
    heaps.pop() ; }
  printf("%d ", umplu[n]) ;
  while (!heaps.empty())
    heaps.pop() ;
  for (i = 1 ; i <= B ; ++ i)
    heaps.push({b[i], i }) ;
  for (i = 1 ; i <= n ; ++ i) {
    tp = heaps.top() ;
    capac[i] = tp.first ;
    heaps.push({ capac[i] + b[tp.second], tp.second }) ;
    heaps.pop() ; }
  for (i = 1 ; i <= n ; ++ i)
    ans = std::max(ans, umplu[i] + capac[n - i + 1]) ;
  printf("%d\n", ans) ;
  return 0 ; }