Submission #1151950

#TimeUsernameProblemLanguageResultExecution timeMemory
1151950byunjaewooKoala Game (APIO17_koala)C++20
37 / 100
51 ms3812 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;
    playRound(v, t);
    if(t[0]<=1) return 0;
    for(int i=1; i<100; i++) if(t[i]==0) 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, 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<=100/(r-l+1); i++) {
        int p=0, c=r-l+1, k=0;
        for(int j=1; j<=r-l+1; j++) {
            if(c>=i+1) k=j, c-=i+1;
            else {
                if(p+(i+1-c)<l) k=j, p+=(i+1-c), c=0;
            }
        }
        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, xl, P), F(l+xl.size(), r, xr, P);
        return;
    }
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        // TODO: Implement Subtask 4 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    } else {
        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, x, P);
    }
}

Compilation message (stderr)

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