Rezultati

Up. imeNalogaJezikRezultatČas oddaje
jam-2018 Arbitraža C++ 100/100OK 13. okt '18 @ 14:01

Test Točke Porabljen spomin Porabljen čas Status
#1 11/11 3,254 MiB 0,000 s OK
#2 11/11 5,164 MiB 0,085 s OK
#3 11/11 4,621 MiB 0,033 s OK
#4 11/11 3,918 MiB 0,045 s OK
#5 11/11 3,863 MiB 0,045 s OK
#6 11/11 5,316 MiB 0,045 s OK
#7 11/11 5,160 MiB 0,070 s OK
#8 11/11 3,277 MiB 0,004 s OK
#9 12/12 3,297 MiB 0,000 s OK

Ocenjevani program (main.cpp):
#include <iostream>
#include <vector>
#include <utility>
#include <tuple>
#include <string>
#include <sstream>
#include <algorithm>
#include <list>
#include <map>
#include <cmath>

using namespace std;

template <typename T> void print(vector<T> &tab) {
  for (T i : tab)
    cout << i << ", ";
  cout << endl;
}

int main() {
  cout.precision(12);
  ios::sync_with_stdio(false);

  int lenp, lens, k;
  cin >> lenp >> lens >> k;

  if(lens + lenp < k){
    k = lens + lenp;
  }

  vector<long long> p (lenp, 0);
  vector<long long> s (lens, 0);

  for(int i = 0; i < lenp; i++){
    cin >> p[i];
  }
  for(int i = 0; i < lens; i++){
    cin >> s[i];
  }

  sort(p.begin(), p.end(), [](const long long &a, const long long &b) {
    return a > b;
  });
  sort(s.begin(), s.end(), [](const long long &a, const long long &b) {
    return a > b;
  });

  vector<long long> vrednosti (k+1, 0);

  // prvi
  int np = 0, ns = 0;

  long long m0 = 0;
  for(int i = 0; i < min(lens, k); i++){
    m0 += s[i];
    ns++;
  }
  for(int i = 0; i < k - lens; i++){
    if(i >= lens){
      m0 += p[i];
    }else{
      m0 -= s[i];
      m0 += s[i] * p[i];
    }
    np++;
  }

  long long maks = 0;
  if(np >= ns){
    maks = m0 * np;
  }else{
    maks = m0 * ns;
  }

  vrednosti[0] = m0;
  //cout << vrednosti[0] << endl;


  for(int i = 1; i < k + 1 && ns >= 0 && np < lenp; i++){
    long long vrednost = vrednosti[i-1];
    // Odstej zadnjo vrednost b

    if(np < ns - 1){
      vrednost -= s[ns-1];
      vrednost -= s[np];
      vrednost += s[np] * p[np];
    }else if(np == ns - 1){
      vrednost -= s[ns-1];
      vrednost += s[np];
    }else{
      vrednost -= s[ns - 1] * p[ns - 1];
      vrednost += p[ns - 1];
      vrednost += p[np];
    }

    ns--;
    np++;

    if(np >= ns){
      maks = max(maks, vrednost * np);
    }else{
      maks = max(maks, vrednost * ns);
    }

    vrednosti[i] = vrednost;
    //cout << vrednosti[i] << endl;
  }

  cout << maks << endl;

}

/*
4 3 4
1 4 3 1
2 1 2

*/