Submission #1151964

#TimeUsernameProblemLanguageResultExecution timeMemory
1151964byunjaewooKoala Game (APIO17_koala)C++20
100 / 100
34 ms460 KiB
#include "koala.h"
#include <bits/stdc++.h>
using namespace std;

int minValue(int N, int W) {
    int v[100]={0}, t[100]={0};
    v[0]=1;
    if(W==2*N) for(int i=0; i<100; i++) v[i]++;
    playRound(v, t);
    if(t[0]<=(W/N)) return 0;
    for(int i=1; i<100; i++) if(t[i]<(W/N)) return i;
}

int maxValue(int N, int W) {
    int v[100]={0}, t[100]={0};
    vector<int> c;
    for(int i=0; i<100; i++) c.push_back(i);
    for(int i=0; i<4; i++) {
        if(c.size()==1) break;
        vector<int> c2;
        fill(v, v+100, 0);
        for(int j:c) v[j]=100/c.size();
        playRound(v, t);
        for(int j:c) if(t[j]>(100/c.size())) c2.push_back(j);
        c=c2;
    }
    return c[0];
}

int greaterValue(int N, int W) {
    int v[100]={0}, t[100]={0};
    v[0]=v[1]=4;
    playRound(v, t);
    if((t[0]>4)!=(t[1]>4)) return ((t[0]>4)<(t[1]>4));
    if(t[0]>4) {
        v[0]=v[1]=8;
        playRound(v, t);
        if((t[0]>8)!=(t[1]>8)) return ((t[0]>8)<(t[1]>8));
        else if(t[0]>8) {
            v[0]=v[1]=10;
            playRound(v, t);
            return ((t[0]>10)<(t[1]>10));
        }
    }
    else {
        v[0]=v[1]=3;
        playRound(v, t);
        if((t[0]>3)!=(t[1]>3)) return ((t[0]>3)<(t[1]>3));
        else {
            v[0]=v[1]=1;
            playRound(v, t);
            return ((t[0]>1)<(t[1]>1));
        }
    }
}

void F(int l, int r, int W, vector<int> x, int *P) {
    if(l==r) {
        P[x[0]]=l;
        return;
    }
    int v[100]={0}, t[100]={0};
    for(int i=1; i<=W/(r-l+1); i++) {
        int p=0, c=W-100+r-l+1, k=0;
        for(int j=1; j<=r-l+1; j++) {
            int sum=0; bool flag=true;
            for(int q=0; q<i+1; q++) {
                if(p+1<l && sum+(p+1)<=r-j+1) sum+=(++p);
                else if(c) c--;
                else flag=false;
            }
            if(flag) k=j;
        }
        if(!k || k==r-l+1) continue;
        for(int j:x) v[j]=i;
        playRound(v, t);
        vector<int> xl, xr;
        for(int j:x) {
            if(t[j]>i) xr.push_back(j);
            else xl.push_back(j);
        }
        F(l, l+xl.size()-1, W, xl, P), F(l+xl.size(), r, W, xr, P);
        return;
    }
}

void allValues(int N, int W, int *P) {
    vector<int> x;
    int p=minValue(N, W);
    P[p]=1;
    for(int i=0; i<100; i++) if(i!=p) x.push_back(i);
    F(2, 100, W, x, P);
}

Compilation message (stderr)

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