Cod sursa(job #1690322)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 14 aprilie 2016 23:26:10
Problema Fabrica Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <queue>
#include <algorithm>
#define pii pair<int,int>

using namespace std;

const int NM=100005;

priority_queue< pii, vector< pii >, greater< pii > > Heap;
int bere_a[NM], bere_b[NM], a[NM], b[NM], i,n, A,B, Max=-1;
pair<int,int> Z;

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) Heap.push({a[i],i});

    for(i=1; i<=n; ++i)
    {
        Z=Heap.top();
        bere_a[i]=Z.first;
        Heap.push({bere_a[i]+a[Z.second], Z.second});
        Heap.pop();
    }
    printf("%d ", bere_a[n]);

    while(Heap.size()) Heap.pop();

    for(i=1; i<=B; ++i) Heap.push({b[i],i});

    for(i=1; i<=n; ++i)
    {
        Z=Heap.top();
        bere_b[i]=Z.first;
        Heap.push({ bere_b[i]+b[Z.second], Z.second});
        Heap.pop();
    }
    for(i=1; i<=n; ++i) Max=max(Max, bere_a[i]+bere_b[n-i+1] );

    printf("%d\n", Max);

    return 0;
}