Submission #200848

# Submission time Handle Problem Language Result Execution time Memory
200848 2020-02-08T10:06:33 Z BThero Koala Game (APIO17_koala) C++17
43 / 100
108 ms 504 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) {
    stable_sort(all(v), cmp);
    return 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:178: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]
 }
 ^
# Verdict Execution time Memory Grader output
1 Correct 10 ms 248 KB Output is correct
2 Correct 11 ms 376 KB Output is correct
3 Correct 10 ms 248 KB Output is correct
4 Correct 9 ms 248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 22 ms 380 KB Output is correct
2 Correct 22 ms 248 KB Output is correct
3 Correct 25 ms 376 KB Output is correct
4 Correct 22 ms 248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Partially correct 95 ms 376 KB Output is partially correct
2 Partially correct 108 ms 248 KB Output is partially correct
3 Partially correct 96 ms 248 KB Output is partially correct
4 Partially correct 92 ms 248 KB Output is partially correct
5 Partially correct 94 ms 248 KB Output is partially correct
6 Partially correct 97 ms 504 KB Output is partially correct
7 Partially correct 89 ms 248 KB Output is partially correct
8 Partially correct 92 ms 248 KB Output is partially correct
9 Partially correct 92 ms 248 KB Output is partially correct
10 Partially correct 90 ms 248 KB Output is partially correct
# Verdict Execution time Memory Grader output
1 Correct 38 ms 376 KB Output is correct
2 Correct 54 ms 248 KB Output is correct
3 Correct 54 ms 248 KB Output is correct
4 Correct 52 ms 248 KB Output is correct
5 Correct 52 ms 248 KB Output is correct
6 Correct 52 ms 248 KB Output is correct
7 Correct 54 ms 376 KB Output is correct
8 Correct 53 ms 248 KB Output is correct
9 Correct 52 ms 248 KB Output is correct
10 Correct 51 ms 328 KB Output is correct
11 Correct 54 ms 248 KB Output is correct
12 Correct 27 ms 248 KB Output is correct
13 Correct 50 ms 248 KB Output is correct
14 Correct 47 ms 376 KB Output is correct
15 Correct 47 ms 248 KB Output is correct
16 Correct 49 ms 248 KB Output is correct
17 Correct 49 ms 248 KB Output is correct
18 Correct 51 ms 376 KB Output is correct
19 Correct 49 ms 376 KB Output is correct
20 Correct 50 ms 248 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 51 ms 376 KB Output isn't correct
2 Halted 0 ms 0 KB -