Cod sursa(job #1682323)

Utilizator akaprosAna Kapros akapros Data 10 aprilie 2016 10:15:02
Problema Fabrica Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
#define maxN 100002
#define pii pair < int, int >
#define f first
#define s second
#define mp make_pair
using namespace std;
multiset < pii > V;
int v[2][maxN], a[2][maxN], n, nra, nrb, ans;
void read()
{
    int i;
    freopen("fabrica.in", "r", stdin);
    scanf("%d %d %d", &n, &nra, &nrb);
    for (i = 1; i <= nra; ++ i)
        scanf("%d", &a[0][i]);
    for (i = 1; i <= nrb; ++ i)
        scanf("%d", &a[1][i]);
}
void solveab(int t, int nr)
{
    int i;
    V.erase(V.begin(), V.end());
    for (i = 1; i <= nr; ++ i)
        V.insert(mp(a[t][i], a[t][i]));
    for (i = 1; i <= n; ++ i)
    {
        v[t][i] = V.begin()->f;
        V.insert(mp(V.begin()->f + V.begin()->s, V.begin()->s));
        V.erase(V.begin());
    }
}
void solve()
{
    int i;
    solveab(0, nra);
    solveab(1, nrb);
}
void write()
{
    int i;
    freopen("fabrica.out", "w", stdout);
    for (i = 1; i <= n; ++ i)
        if (v[0][i] + v[1][n - i + 1] > ans)
           ans = v[0][i] + v[1][n - i + 1];
    printf("%d %d", v[0][n], ans);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}