답안 #523265

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
523265 2022-02-07T09:40:55 Z valerikk 코알라 (APIO17_koala) C++17
37 / 100
89 ms 328 KB
#include "koala.h"

#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>

using namespace std;

int B[100], R[100];

int minValue(int N, int W) {
    // TODO: Implement Subtask 1 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    
    memset(B, 0, sizeof(B));
    B[0] = 1;
    playRound(B, R);
    for (int i = 0; i < N; ++i) {
        if (R[i] == 0) {
            return i;
        }
    }
    
    assert(false);
    return 0;
}

int maxValue(int N, int W) {
    // TODO: Implement Subtask 2 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    vector<int> cur;
    for (int i = 0; i < N; ++i) {
        cur.push_back(i);
    }
    while (cur.size() != 1) {
        int x = W / (int)cur.size();
        memset(B, 0, sizeof(B));
        for (int i : cur) {
            B[i] = x;
        }
        playRound(B, R);
        vector<int> ncur;
        for (int i : cur) {
            if (R[i] > B[i]) {
                ncur.push_back(i);
            }
        }
        cur = ncur;
    }
    return cur[0];
}

int greaterValue(int N, int W) {
    // TODO: Implement Subtask 3 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    int l = 1, r = min(N / 2, 9);
    int res = -1;
    while (r - l > 1) {
        int m = (l + r) / 2;
        memset(B, 0, sizeof(B));
        B[0] = B[1] = m;
        playRound(B, R);
        if ((B[1] < R[1]) != (B[0] < R[0])) {
            res = B[1] < R[1];
        }
        if (B[0] < R[0] || B[1] < R[1]) {
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    if (res == -1) {
        memset(B, 0, sizeof(B));
        B[0] = B[1] = l;
        playRound(B, R);
        res = B[1] < R[1];
    }
    return res;
}

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 {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 200 KB Output is correct
2 Correct 5 ms 200 KB Output is correct
3 Correct 3 ms 200 KB Output is correct
4 Correct 4 ms 200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 200 KB Output is correct
2 Correct 11 ms 200 KB Output is correct
3 Correct 12 ms 316 KB Output is correct
4 Correct 12 ms 316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 316 KB Output is correct
2 Correct 69 ms 328 KB Output is correct
3 Correct 68 ms 312 KB Output is correct
4 Correct 73 ms 316 KB Output is correct
5 Correct 79 ms 316 KB Output is correct
6 Correct 89 ms 316 KB Output is correct
7 Correct 67 ms 320 KB Output is correct
8 Correct 65 ms 316 KB Output is correct
9 Correct 64 ms 328 KB Output is correct
10 Correct 62 ms 320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 200 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 200 KB Output isn't correct
2 Halted 0 ms 0 KB -