답안 #716285

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
716285 2023-03-29T13:21:49 Z tht2005 코알라 (APIO17_koala) C++17
37 / 100
56 ms 336 KB
#include "koala.h"

#include <bits/stdc++.h>

using namespace std;

const int N = 102;

int B[N], R[N];

int minValue(int N, int W) {
    memset(B, 0, N * sizeof *B);
    B[0] = 1;
    playRound(B, R);
    for(int i = 0; i < N; ++i) {
        if(R[i] <= B[i]) {
            return i;
        }
    }
}

int maxValue(int N, int W) {
    vector<int> S(N);
    iota(S.begin(), S.end(), 0);
    while((int)S.size() > 1) {
        memset(B, 0, N * sizeof *B);
        for(int i : S) {
            B[i] = N / S.size();
        }
        playRound(B, R);
        vector<int> T;
        for(int i : S) {
            if(R[i] > B[i]) {
                T.push_back(i);
            }
        }
        S.swap(T);
    }
    return S[0];
}

int greaterValue(int N, int W) {
    memset(B, 0, N * sizeof *B);
    int l = 1, r = 9;
    while(l <= r) {
        int mid = (l + r) >> 1;
        B[0] = B[1] = mid;
        playRound(B, R);
        bool check = (R[0] > B[0]), check1 = (R[1] > B[1]);
        if(check != check1) {
            return check ? 0 : 1;
        }
        if(check) {
            l = mid + 1;
        }
        else {
            r = mid - 1;
        }
    }
}

bool compare(int i, int j) {
    memset(B, 0, sizeof(B));
    int l = 52, r = 59;
    while(l <= r) {
        int mid = (l + r) >> 1;
        B[i] = B[j] = mid;
        playRound(B, R);
        bool check = (R[i] > B[i]), check1 = (R[j] > B[j]);
        if(check != check1) {
            return !check;
        }
        if(check) {
            l = mid + 1;
        }
        else {
            r = mid - 1;
        }
    }
}

void solve(int l, int r, vector<int>& A) {
    if(l == r) {
        return;
    }
    int m = (l + r) >> 1;
    solve(l, m, A);
    solve(m + 1, r, A);
    vector<int> B(r + 1 - l);
    for(int i = l, j = l, k = m + 1; i <= r; ++i) {
        if(k > r || (j <= m && compare(A[j], A[k]))) {
            B[i - l] = A[j++];
        }
        else {
            B[i - l] = A[k++];
        }
    }
    for(int i = l; i <= r; ++i) {
        A[i] = B[i - l];
    }
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        vector<int> A(N);
        iota(A.begin(), A.end(), 0);
        solve(0, N - 1, A);
        for(int i = 0; i < N; ++i) {
            P[A[i]] = i + 1;
        }
    }
    else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}

Compilation message

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:20:1: warning: control reaches end of non-void function [-Wreturn-type]
   20 | }
      | ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:60:1: warning: control reaches end of non-void function [-Wreturn-type]
   60 | }
      | ^
koala.cpp: In function 'bool compare(int, int)':
koala.cpp:80:1: warning: control reaches end of non-void function [-Wreturn-type]
   80 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 208 KB Output is correct
2 Correct 3 ms 320 KB Output is correct
3 Correct 3 ms 292 KB Output is correct
4 Correct 3 ms 324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 324 KB Output is correct
2 Correct 12 ms 320 KB Output is correct
3 Correct 12 ms 324 KB Output is correct
4 Correct 14 ms 208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 336 KB Output is correct
2 Correct 56 ms 320 KB Output is correct
3 Correct 50 ms 336 KB Output is correct
4 Correct 48 ms 328 KB Output is correct
5 Correct 51 ms 332 KB Output is correct
6 Correct 48 ms 316 KB Output is correct
7 Correct 47 ms 320 KB Output is correct
8 Correct 51 ms 332 KB Output is correct
9 Correct 47 ms 336 KB Output is correct
10 Correct 47 ms 324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 328 KB Output is correct
2 Incorrect 36 ms 316 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -