Submission #1336247

#TimeUsernameProblemLanguageResultExecution timeMemory
1336247itaykarny코알라 (APIO17_koala)C++20
74 / 100
43 ms464 KiB
#include "koala.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<bitset>
#include<math.h>
#include<set>
#include<map>
#include<queue>
#include<stack>

using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using pll = pair<ll, ll>;
using vpll = vector<pll>;
using vvpll = vector<vpll>;

const ll n = 100;
ll w = 100;

int b[n], r[n];
int p[n];

void solve(vll& ind, ll offset, ll go, bool need_left) {
    ll m = ind.size();
    if (m == 0) { return; }
    if (m == 1) {
        p[ind[0]] = offset;
        return;
    }
    ll put = 1 + go;
    for (ll i = 0; i < n; i++) {
        b[i] = 0, r[i] = 0;
    }
    for (ll i = 0; i < m; i++) {
        b[ind[i]] = put;
    }
    playRound(b, r);
    vll left, right;
    for (ll i = 0; i < m; i++) {
        if (r[ind[i]] > b[ind[i]]) {
            right.push_back(ind[i]);
        }
        else {
            left.push_back(ind[i]);
        }
    }
    if (need_left) { solve(left, offset, go, need_left); }
    solve(right, offset + left.size(), go + 1, need_left);
}

void solve1(vll& ind, ll offset, ll go, bool need_left) {
    ll m = ind.size();
    if (m == 0) { return; }
    if (m == 1) {
        p[ind[0]] = offset;
        return;
    }
    ll put = 2 + go;
    for (ll i = 0; i < n; i++) {
        b[i] = 1, r[i] = 0;
    }
    for (ll i = 0; i < m; i++) {
        b[ind[i]] = put;
    }
    playRound(b, r);
    vll left, right;
    for (ll i = 0; i < m; i++) {
        if (r[ind[i]] > b[ind[i]]) {
            right.push_back(ind[i]);
        }
        else {
            left.push_back(ind[i]);
        }
    }
    if (need_left) { solve(left, offset, go, need_left); }
    solve(right, offset + left.size(), go + 1, need_left);
}

int minValue(int N, int W) {
    for (ll i = 0; i < n; i++) {
        b[i] = 0, r[i] = 0;
    }
    b[0] = 1;
    playRound(b, r);
    for (ll i = 0; i < n; i++) {
        if (r[i] == 0) { return i; }
    }
}

int maxValue(int N, int W) {
    vll ind(n);
    for (ll i = 0; i < n; i++) {
        ind[i] = i;
    }
    for (ll i = 0; i < n; i++) {
        p[i] = 0;
    }
    solve(ind, 1, 0, false);
    for (ll i = 0; i < n; i++) {
        if (p[i] == n) { 
            return i; 
        }
    }
}

int greaterValue(int N, int W) {
    ll start = 1, end = 8;
    while (start <= end) {
        ll mid = (start + end) / 2;
        for (ll i = 0; i < n; i++) {
            b[i] = 0, r[i] = 0;
        }
        b[0] = mid, b[1] = mid;
        playRound(b, r);
        if (r[0] == r[1]) {
            if (r[0] == 0) {
                end = mid - 1;
            }
            else {
                start = mid + 1;
            }
        }
        else {
            if (r[0] < r[1]) { return 1; }
            else { return 0; }
        }
    }
    return 0;
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        vll ind(n);
        for (ll i = 0; i < n; i++) {
            ind[i] = i;
        }
        solve1(ind, 1, 0, true);
        for (ll i = 0; i < n; i++) {
            P[i] = p[i];
        }
    } else {
        vll ind(n);
        for (ll i = 0; i < n; i++) {
            ind[i] = i;
        }
        solve(ind, 1, 0, true);
        for (ll i = 0; i < n; i++) {
            P[i] = p[i];
        }
    }
}

Compilation message (stderr)

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:91:1: warning: control reaches end of non-void function [-Wreturn-type]
   91 | }
      | ^
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:107:1: warning: control reaches end of non-void function [-Wreturn-type]
  107 | }
      | ^
#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...