Submission #984273

#TimeUsernameProblemLanguageResultExecution timeMemory
984273UnforgettableplKoala Game (APIO17_koala)C++17
77 / 100
39 ms600 KiB
#include <bits/stdc++.h>
using namespace std;

//#define int long long

void playRound(int *B, int *R);

int minValue(int N, int W) {
    int arr[100];fill(arr,arr+100,0);
    int res[100];fill(res,res+100,0);
    arr[0] = 1;
    playRound(arr,res);
    for(int i=0;i<N;i++)if(res[i]<=arr[i])return i;
}

int maxValue(int N, int W) {
    vector<int> poss(N);iota(poss.begin(), poss.end(),0);
    while(poss.size()>1){
        int arr[100];fill(arr,arr+100,0);
        int res[100];fill(res,res+100,0);
        int distrib = W/poss.size();
        for(int&i:poss)arr[i]=distrib;
        playRound(arr,res);
        poss.clear();
        for(int i=0;i<N;i++)if(arr[i] and res[i]>arr[i])poss.emplace_back(i);
    }
    return poss[0];
}
bool second_way;
bool lessth(int a,int b){
    if(second_way){
        int arr[100];
        fill(arr, arr + 100, 0);
        int res[100];
        fill(res, res + 100, 0);
        arr[a] = arr[b] = 100;
        playRound(arr,res);
        return res[b] > arr[b];
    }
    int lo = 1, hi = 13;
    while (true) {
        int mid = (lo + hi) / 2;
        if(mid>8){hi=mid-1;}
        int arr[100];
        fill(arr, arr + 100, 0);
        int res[100];
        fill(res, res + 100, 0);
        arr[a] = arr[b] = mid;
        playRound(arr, res);
        bool zerogud = res[a] > arr[a];
        bool onegud = res[b] > arr[b];
        if (zerogud == onegud) {
            if (zerogud) {
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
            continue;
        }
        return onegud;
    }
}

int greaterValue(int N, int W) {
    return lessth(0,1);
}

void allValues(int N, int W, int *P) {
    second_way = 2*N==W;
    vector<int> permutation;
    for(int i=0;i<N;i++){
        permutation.insert(lower_bound(permutation.begin(), permutation.end(),i,lessth),i);
    }
    for(int i=0;i<N;i++){
        P[permutation[i]]=i+1;
    }
}

Compilation message (stderr)

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