답안 #200846

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
200846 2020-02-08T10:05:28 Z BThero 코알라 (APIO17_koala) C++17
43 / 100
117 ms 488 KB
// Why am I so dumb? :c
// chrono::system_clock::now().time_since_epoch().count()
                                                  
#include<bits/stdc++.h>
#include "koala.h"
//#include<ext/pb_ds/assoc_container.hpp>
//#include<ext/pb_ds/tree_policy.hpp>

#define pb push_back
#define mp make_pair

#define all(x) (x).begin(), (x).end()

#define fi first
#define se second

using namespace std;
//using namespace __gnu_pbds;

typedef long long ll;   
typedef pair<int, int> pii;
//template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

int n, w;

int minValue(int N, int W) {
    int me[N], you[N];

    for (int i = 0; i < N; ++i) {
        me[i] = 0;
    }

    me[0] = 1;
    playRound(me, you);
    int i = 0;

    while (you[i]) {
        ++i;
    }

    return i;
}

int maxValue(int N, int W) {
    int me[N], you[N];
    vector<int> v;

    for (int i = 0; i < N; ++i) {
        v.pb(i);
    }

    while (v.size() > 1) {
        int sz = v.size();
        int k = (W + sz) / sz - 1;
        fill(me, me + N, 0);
                
        // v.size() > k

        for (int x : v) {
            me[x] = k;
        }

        playRound(me, you);

        vector<int> nv;

        for (int x : v) {
            if (you[x] > me[x]) {
                nv.pb(x);
            }
        }

        assert(!nv.empty());
        v = nv;            
    }
    
    return v[0];
}

bool cmp(int a, int b) {
    int me[n] = {}, you[n];
    int L = 1, R = 8;

    while (L <= R) {
        int x = (L + R) >> 1;
        me[0] = me[1] = x;
        playRound(me, you);

        if (you[a] != you[b]) {
            if (you[a] > you[b]) {
                return 0;
            }
            else {
                return 1;
            }
        }

        if (you[a] > 0) {
            L = x + 1;
        }
        else {
            R = x - 1;
        }
    }
}

bool cmp2(int a, int b) {
    int me[n] = {}, you[n];
    me[a] = me[b] = n;
    playRound(me, you); 
    return you[b] > me[b];
}

int greaterValue(int N, int W) {
    n = N;
    w = W;
    return cmp(0, 1) ? 1 : 0;        
}

vector<int> solve(vector<int> v) {
    if (v.size() <= 1) {
        return v;
    }    

    int me[n] = {}, you[n];
    int k = w / v.size();

    for (int x : v) {
        me[x] = k;
    }

    playRound(me, you);
    vector<int> a, b;

    for (int x : v) {
        if (you[x] > 0) {
            b.pb(x);
        }
        else {
            a.pb(x);
        }
    }

    if (a.empty() || b.empty()) {
        stable_sort(all(v), cmp);
        return v;
    }

    a = solve(a);
    b = solve(b);                            

    for (int x : b) {
        a.pb(x);
    }

    return a;
}

void allValues(int N, int W, int *P) {
    n = N;
    w = W;    
    vector<int> v;

    for (int i = 0; i < n; ++i) {
        v.pb(i);
    }

    if (w == 2 * n) {
        stable_sort(all(v), cmp2);
    }
    else {
        v = solve(v);
    }

    for (int i = 0; i < v.size(); ++i) {
        P[v[i]] = i + 1;
    }
}

Compilation message

koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:175:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < v.size(); ++i) {
                     ~~^~~~~~~~~~
koala.cpp: In function 'bool cmp(int, int)':
koala.cpp:105:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 248 KB Output is correct
2 Correct 11 ms 248 KB Output is correct
3 Correct 10 ms 248 KB Output is correct
4 Correct 10 ms 252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 376 KB Output is correct
2 Correct 23 ms 376 KB Output is correct
3 Correct 22 ms 376 KB Output is correct
4 Correct 22 ms 252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 95 ms 376 KB Output is partially correct
2 Partially correct 117 ms 248 KB Output is partially correct
3 Partially correct 95 ms 376 KB Output is partially correct
4 Partially correct 97 ms 440 KB Output is partially correct
5 Partially correct 106 ms 376 KB Output is partially correct
6 Partially correct 99 ms 248 KB Output is partially correct
7 Partially correct 108 ms 440 KB Output is partially correct
8 Partially correct 103 ms 248 KB Output is partially correct
9 Partially correct 95 ms 380 KB Output is partially correct
10 Partially correct 100 ms 488 KB Output is partially correct
# 결과 실행 시간 메모리 Grader output
1 Correct 36 ms 376 KB Output is correct
2 Correct 57 ms 376 KB Output is correct
3 Correct 55 ms 248 KB Output is correct
4 Correct 57 ms 248 KB Output is correct
5 Correct 53 ms 248 KB Output is correct
6 Correct 57 ms 376 KB Output is correct
7 Correct 54 ms 248 KB Output is correct
8 Correct 56 ms 248 KB Output is correct
9 Correct 54 ms 248 KB Output is correct
10 Correct 55 ms 248 KB Output is correct
11 Correct 57 ms 332 KB Output is correct
12 Correct 26 ms 376 KB Output is correct
13 Correct 54 ms 412 KB Output is correct
14 Correct 49 ms 376 KB Output is correct
15 Correct 49 ms 376 KB Output is correct
16 Correct 51 ms 248 KB Output is correct
17 Correct 50 ms 376 KB Output is correct
18 Correct 50 ms 416 KB Output is correct
19 Correct 50 ms 376 KB Output is correct
20 Correct 49 ms 380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -