Rezultati

Up. imeNalogaJezikRezultatČas oddaje
rektifikatorji-2018 Arbitraža C++ 0/100Napačen odgovor (WA) 13. okt '18 @ 14:48

Test Točke Porabljen spomin Porabljen čas Status
#1 0/11 3,215 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​1600
<<<EOF>>>
Pravilen izhod:
​1554
<<<EOF>>>
#2 0/11 3,770 MiB 0,148 s Napačen odgovor
Tvoj izhod:
​2094390875181132690
<<<EOF>>>
Pravilen izhod:
​3927348005979832029
<<<EOF>>>
#3 0/11 3,574 MiB 0,069 s Napačen odgovor
Tvoj izhod:
​4825030286208
<<<EOF>>>
Pravilen izhod:
​4819417741398
<<<EOF>>>
#4 11/11 3,594 MiB 0,110 s OK
#5 11/11 3,387 MiB 0,092 s OK
#6 0/11 3,918 MiB 0,081 s Napačen odgovor
Tvoj izhod:
​19997200026
<<<EOF>>>
Pravilen izhod:
​14997600000
<<<EOF>>>
#7 0/11 3,770 MiB 0,141 s Napačen odgovor
Tvoj izhod:
​190016797425
<<<EOF>>>
Pravilen izhod:
​187299278250
<<<EOF>>>
#8 0/11 3,223 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​131820889787840
<<<EOF>>>
Pravilen izhod:
​1565928990927848
<<<EOF>>>
#9 0/12 3,012 MiB 0,004 s Napačen odgovor
Tvoj izhod:
​1434895393212000
<<<EOF>>>
Pravilen izhod:
​3359183337051000
<<<EOF>>>

Ocenjevani program (main.cpp):
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <unordered_map>
#include <algorithm>
#include <cstring>
#include <queue>
#define ll long long

using namespace std;

int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    int* A = new int[n];
    int* B = new int[m];
    for (int i = 0; i < n; ++i) cin >> A[i];
    for (int i = 0; i < m; ++i) cin >> B[i];
    sort(A, A + n, [](int a1, int a2) {return a1 > a2;});
    sort(B, B + m, [](int a1, int a2) {return a1 > a2;});

    // DO STUFF
    int b = k / 2;
    int a = k - b;
    ll start_mul = 0, start_res = 0;

    if (a > n)
    {
        a = n;
        b = k - a;
        for (int i = a; i < b; ++i) {
            start_res += B[i];
        }
    }
    else if (b > m)
    {
        b = m;
        a = k - b;
        for (int i = b; i < a; ++i) {
            start_res += A[i];
        }
    }
    else
    {
        start_res = (a != b) ? A[b] : 0;
    }

    int mn = min(a, b);
    for (int i = 0; i != mn; i++)
    {
        start_mul += A[i] * B[i];
    }
    ll best = max(a, b)*(start_mul + start_res);


    ll curr_mul = start_mul;
    ll curr_res = start_res;

    int _a = a, _b = b;
    //cout << best << endl;

    for (int i = a + 1; i <= k && i < n; i++)
    {
        _b = k - i;
        curr_mul -= A[_b] * B[_b];
        curr_res += A[_b] + A[_b + 1];

        best = max(best, max(i, _b) * (curr_mul + curr_res));
        //cout << best << endl;
    }

    for (int i = b + 1; i <= k && i < m; i++)
    {
        _a = k - i;
        curr_mul -= A[_a] * B[_a];
        curr_res += B[_a] + B[_a + 1];

        best = max(best, max(i, _a) * (curr_mul + curr_res));
        //cout << best << endl;
    }

    cout << best << endl;

    return 0;
}