Submission #652486

# Submission time Handle Problem Language Result Execution time Memory
652486 2022-10-22T18:18:16 Z blue Koala Game (APIO17_koala) C++17
19 / 100
15 ms 208 KB
#include "koala.h"
#include <bits/stdc++.h>
using namespace std;

using vi = vector<int>;
using vvi = vector<vi>;
#define sz(x) int(x.size())

int N;

vi playRound(vi BV)
{
    int B[N];
    int R[N];
    for(int i = 0; i < N; i++)
    {
        B[i] = BV[i];
    }
    playRound(B, R);

    vi RV(N);
    for(int i = 0; i < N; i++)
        RV[i] = R[i];

    return RV;
}

int minValue(int N_, int W) {
    N = N_;
    
    vi B(N, 0);
    B[0] = 1;
    vi R = playRound(B);

    for(int i = 0; i < N; i++)
        if(R[i] == 0)
            return i;

    return 0;
}

int maxValue(int N_, int W) {
    N = N_;
   
    vi cand;
    for(int i = 0; i < N; i++)
        cand.push_back(i);

    while(sz(cand) > 1)
    {
        int toput = W / sz(cand);

        vi B(N, 0);
        for(int i : cand)
            B[i] = toput;

        vi R = playRound(B);

        vi newcand;

        for(int i = 0; i < N; i++)
        {
            if(B[i] > 0 && R[i] > B[i])
                newcand.push_back(i);
        }
        cand = newcand;
    }

    return cand[0];
}

int greaterValue(int N_, int W) {
    N = N_;
    
    vi curr; //vector of smallest stones
    for(int i = 0; i < N; i++)
        curr.push_back(i);

    while(1)
    {
        vi cand = curr; //vector of largest stones withi curr

        while(1)
        {
            int koala_stones = W - (N - sz(curr));
            int toput = max(1, min(W / sz(cand), koala_stones / ((sz(cand) / 2) + 1) - 1));

            vi B(N, 0);
            for(int i : cand)
                B[i] = toput;

            vi R = playRound(B);

            vi taken(N, 0);
            for(int i = 0; i < N; i++)
                if(R[i] > B[i])
                    taken[i] = 1;

            if(taken[0] && !taken[1])
                return 0;
            else if(taken[1] && !taken[0])
                return 1;
            else if(!taken[0] && !taken[1])
            {
                vi newcurr;
                for(int u : curr)
                    if(!taken[u])
                        newcurr.push_back(u);
                curr = newcurr;
                break;
            }
            else if(taken[0] && taken[1])
            {
                vi newcand;
                for(int u : cand)
                    if(taken[u])
                        newcand.push_back(u);
                cand = newcand;
            }
        }
    }

    return -1;
}

void allValues(int N_, int W, int *P_) {
    N = N_;

    vi P(N);
    for(int i = 0; i < N; i++)
        P[i] = P_[i];

    if (W == 2*N) {
        // TODO: Implement Subtask 4 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 208 KB Output is correct
2 Correct 4 ms 208 KB Output is correct
3 Correct 4 ms 208 KB Output is correct
4 Correct 4 ms 208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 208 KB Output is correct
2 Correct 13 ms 208 KB Output is correct
3 Correct 15 ms 208 KB Output is correct
4 Correct 12 ms 208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -