Submission #968987

#TimeUsernameProblemLanguageResultExecution timeMemory
968987kilkuwuKoala Game (APIO17_koala)C++17
47 / 100
44 ms596 KiB
#include "koala.h"
 
#include <bits/stdc++.h>
#ifdef LOCAL
#include "template/debug.hpp"
#else
#define dbg(...) ;
#define timer(...) ;
#endif
 
int minValue(int N, int W) {
  int B[N], R[N];
  for (int i = 0; i < N; i++) {
    B[i] = 0;
  }
  B[0] = 1;
  playRound(B, R);
 
  for (int i = 0; i < N; i++) {
    if (R[i] <= B[i]) {
      return i;
    }
  }
}
 
int maxValue(int N, int W) {
  int B[N], R[N];
  for (int i = 0; i < N; i++) {
    B[i] = 1;
  }
  playRound(B, R);
  int candidate[N];
  for (int i = 0; i < N; i++) {
    if (R[i] > B[i]) {
      candidate[i] = 1;
      B[i] = 2;
    } else {
      candidate[i] = 0;
      B[i] = 0;
    }
  }
  playRound(B, R);
  for (int i = 0; i < N; i++) {
    if (R[i] > B[i]) {
      if (candidate[i]) {
        B[i] = 4;
      } else {
        B[i] = 0;
      }
    } else {
      candidate[i] = 0;
      B[i] = 0;
    }
  }
  playRound(B, R);
  for (int i = 0; i < N; i++) {
    if (R[i] > B[i]) {
      if (candidate[i]) {
        B[i] = 11;
      } else {
        B[i] = 0;
      }
    } else {
      candidate[i] = 0;
      B[i] = 0;
    }
  }
  playRound(B, R);
 
  for (int i = 0; i < N; i++) {
    if (R[i] > B[i] && candidate[i]) return i;
  }
}
 
int greaterValue(int N, int W) {
  int B[N], R[N];

  for (int i = 0; i < N; i++) B[i] = 0;
  int mb = 5;
  B[0] = B[1] = mb;
  playRound(B, R);
  bool bought0 = R[0] > B[0];
  bool bought1 = R[1] > B[1];

  if (bought0 != bought1) return bought1;

  if (bought0) {
    mb = 8;
  } else {
    mb = 2;
  }

  B[0] = B[1] = mb;
  playRound(B, R);
  bought0 = R[0] > B[0];
  bought1 = R[1] > B[1];

  if (bought0 != bought1) return bought1;

  if (bought0) {
    mb = 3;
  } else {
    mb = 1;
  }

  B[0] = B[1] = mb;
  playRound(B, R);
  bought0 = R[0] > B[0];
  bought1 = R[1] > B[1];

  if (bought0 != bought1) return bought1;
  assert(false);
}

int B[100], R[100];

 
void allValues(int N, int W, int *P) {
  if (W == 2 * N) {
    std::vector<int> ord(N);
    std::iota(ord.begin(), ord.end(), 0);

    auto compare = [&](int i, int j) -> bool {
      B[i] = B[j] = W / 2;
      playRound(B, R);
      B[i] = B[j] = 0;
      return R[j] > B[j];
    };

    std::function<void(std::vector<int>&)> merge_sort = [&](std::vector<int>& v) -> void {
      if (v.size() == 1) return;
      int mid = v.size() / 2;
      std::vector<int> l(v.begin(), v.begin() + mid);
      std::vector<int> r(v.begin() + mid, v.end());
      merge_sort(l);
      merge_sort(r);
      std::merge(l.begin(), l.end(), r.begin(), r.end(), v.begin(), compare);
    };

    merge_sort(ord);

    for (int i = 0; i < N; i++) {
      P[ord[i]] = i + 1;
    }
  } else {
    // TODO: Implement Subtask 5 solution here.
    // You may leave this block unmodified if you are not attempting this
    // subtask.
  }
}

Compilation message (stderr)

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:24:1: warning: control reaches end of non-void function [-Wreturn-type]
   24 | }
      | ^
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:73:1: warning: control reaches end of non-void function [-Wreturn-type]
   73 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...