답안 #262930

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
262930 2020-08-13T11:12:38 Z SorahISA 코알라 (APIO17_koala) C++11
37 / 100
117 ms 512 KB
#include "koala.h"
#include <bits/stdc++.h>
using namespace std;

// #define int long long
#define double long double
using pii = pair<int, int>;
template<typename T>
using prior = std::priority_queue<T, vector<T>, greater<T>>;
template<typename T>
using Prior = std::priority_queue<T>;

#define X first
#define Y second
#define ALL(x) (x).begin(), (x).end()
#define eb emplace_back
#define pb push_back
#define fastIO() ios_base::sync_with_stdio(false), cin.tie(0)

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.
    
    int play[N], ret[N];
    memset(play, 0x00, sizeof(play));
    
    play[0] = 1;
    playRound(play, ret);
    
    for (int i = 0; i < N; ++i) {
        if (ret[i] <= play[i]) return i;
    }
    
    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.
    
    int play[N], ret[N];
    memset(play, 0x00, sizeof(play));
    
    set<int> test;
    for (int i = 0; i < N; ++i) test.insert(i);
    
    while (test.size() != 1) {
        int cookie = W / test.size();
        memset(play, 0x00, sizeof(play));
        for (auto x : test) play[x] = cookie;
        playRound(play, ret);
        
        vector<int> tmp;
        for (auto x : test) {
            if (ret[x] <= play[x]) tmp.eb(x);
        }
        for (auto x : tmp) test.erase(x);
    }
    
    return *test.begin();
}

set<int> known;

int maxValue2(int N, int W) {
    
    int play[N], ret[N];
    memset(play, 0x00, sizeof(play));
    
    set<int> test;
    for (int i = 0; i < N; ++i) test.insert(i);
    for (auto x : known) test.erase(x);
    
    while (test.size() != 1) {
        int cookie = W / test.size();
        memset(play, 0x00, sizeof(play));
        for (auto x : test) play[x] = cookie;
        playRound(play, ret);
        
        vector<int> tmp;
        for (auto x : test) {
            if (ret[x] <= play[x]) tmp.eb(x);
        }
        for (auto x : tmp) test.erase(x);
    }
    
    return *test.begin();
}

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 play[N], ret[N];
    memset(play, 0x00, sizeof(play));
    
    play[0] = play[1] = 3;
    playRound(play, ret);
    if (ret[0] != ret[1]) return ret[1] > ret[0];
    
    if (ret[0] == 0) {
        play[0] = play[1] = 1;
        playRound(play, ret);
        if (ret[0] != ret[1]) return ret[1] > ret[0];
        
        play[0] = play[1] = 2;
        playRound(play, ret);
        if (ret[0] != ret[1]) return ret[1] > ret[0];
    }
    else {
        play[0] = play[1] = 5;
        playRound(play, ret);
        if (ret[0] != ret[1]) return ret[1] > ret[0];
        
        play[0] = play[1] = 8;
        playRound(play, ret);
        if (ret[0] != ret[1]) return ret[1] > ret[0];
    }
    
    return 0;
}

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.
        
        for (int i = 0; i < N; ++i) {
            int mV = maxValue2(N, W - i);
            *(P + mV) = N - i;
            known.insert(mV);
        }
        
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 384 KB Output is correct
2 Correct 6 ms 384 KB Output is correct
3 Correct 6 ms 384 KB Output is correct
4 Correct 6 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 384 KB Output is correct
2 Correct 21 ms 384 KB Output is correct
3 Correct 21 ms 384 KB Output is correct
4 Correct 21 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 384 KB Output is correct
2 Correct 116 ms 384 KB Output is correct
3 Correct 110 ms 512 KB Output is correct
4 Correct 110 ms 384 KB Output is correct
5 Correct 111 ms 384 KB Output is correct
6 Correct 113 ms 384 KB Output is correct
7 Correct 108 ms 412 KB Output is correct
8 Correct 109 ms 384 KB Output is correct
9 Correct 112 ms 384 KB Output is correct
10 Correct 117 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 61 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -