Submission #721975

# Submission time Handle Problem Language Result Execution time Memory
721975 2023-04-11T09:41:04 Z baojiaopisu Koala Game (APIO17_koala) C++14
37 / 100
56 ms 348 KB
#include "koala.h"
#include<bits/stdc++.h>

using namespace std;

using ll = long long;
using ld = long double;
using ull = unsigned long long;

using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pld = pair<ld, ld>;

#define fi first
#define se second
#define left BAO
#define right ANH
#define pb push_back
#define pf push_front
#define mp make_pair
#define ins insert
#define btpc __builtin_popcount
#define btclz __builtin_clz

#define sz(x) (int)(x.size());
#define all(x) x.begin(), x.end()
#define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};

template<class X, class Y>
    bool minimize(X &x, const Y &y) {
        if (x > y)
        {
            x = y;
            return true;
        }
        return false;
    }
template<class X, class Y>
    bool maximize(X &x, const Y &y) {
        if (x < y)
        {
            x = y;
            return true;
        }
        return false;
    }

const int MOD = 1e9 + 7; //998244353

template<class X, class Y>
    void add(X &x, const Y &y) {
        x = (x + y);
        if(x >= MOD) x -= MOD;
    }

template<class X, class Y> 
    void sub(X &x, const Y &y) {
        x = (x - y);
        if(x < 0) x += MOD;
    }

/* Author : Le Ngoc Bao Anh, 12A5, LQD High School for Gifted Student*/

const ll INF = 1e9;
const int N = 1e5 + 10;

int minValue(int N, int W) {
    int n = N, w = W;
    int b[100], r[100];
    for(int i = 0; i < n; i++) b[i] = 0;
    b[0] = 1;
    int ans = 0;
    playRound(b, r);
    for(int i = 1; i < n; i++) {
        if(r[i] == 0) ans = i;
    }
    return ans;
}

int maxValue(int N, int W) {
    int n = N, w = W;
    int b[100], r[100];
    for(int i = 0; i < n; i++) b[i] = 1;
    playRound(b, r);
    vector<int> nxt;
    for(int i = 0; i < n; i++) if(r[i] == 2) nxt.pb(i);
    for(int i = 0; i < n; i++) b[i] = 0;
    for(auto x : nxt) b[x] = 2;
    playRound(b, r);    
    nxt.clear();
    for(int i = 0; i < n; i++) if(r[i] == 3) nxt.pb(i);
    for(int i = 0; i < n; i++) b[i] = 0;
    for(auto x : nxt) b[x] = 4;
    playRound(b, r);
    nxt.clear();
    for(int i = 0; i < n; i++) if(r[i] == 5) nxt.pb(i);
    for(int i = 0; i < n; i++) b[i] = 0;
    for(auto x : nxt) b[x] = 11;
    playRound(b, r);
    int ans = 0;
    for(int i = 0; i < n; i++) if(r[i] == 12) ans = i;
    return ans;
}

int greaterValue(int N, int W) {
    int lo = 1, hi = 9;
    int n = N, w = W;
    int b[100], r[100];
    while(lo <= hi) {
        int mid = (lo + hi) >> 1;
        for(int i = 0; i < n; i++) b[i] = 0;
        b[0] = b[1] = mid;
        playRound(b, r);
        if(r[0] != r[1]) {
            return (r[0] > r[1] ? 0 : 1);
        }

        if(r[0] > b[0]) {
            lo = mid + 1;
        }  else hi = mid - 1;
    }
    return 0;
}

int n, w;
bool compare(int x, int y) {
    int lo = 1, hi = 9;
    int b[100], r[100];
    while(lo <= hi) {
        int mid = (lo + hi) >> 1;
        for(int i = 0; i < n; i++) b[i] = 0;
        b[x] = b[y] = mid;
        playRound(b, r);
        if(r[x] != r[y]) {
            return (r[x] > r[y] ? true : false);
        }

        if(r[0] > b[0]) {
            lo = mid + 1;
        }  else hi = mid - 1;
    }
    return true;
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
    } else {
        n = N, w = W;
        vector<int> ans;
        ans.pb(0);
        for(int i = 1; i < n; i++) {
            int l = 0, r = ans.size() - 1, pos = -1;
            while(l <= r) {
                int mid = (l + r) >> 1;
                if(compare(i, ans[mid])) {
                    pos = mid;
                    l = mid + 1;
                } else r = mid - 1;
            }
            ans.pb(0);
            for(int i = ans.size() - 1; i > pos + 1; i--) ans[i] = ans[i - 1];
            ans[pos + 1] = i;
        }

        for(int i = 0; i < n; i++) {
            P[ans[i]] = i + 1;
        }
    }
}

Compilation message

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:74:16: warning: unused variable 'w' [-Wunused-variable]
   74 |     int n = N, w = W;
      |                ^
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:87:16: warning: unused variable 'w' [-Wunused-variable]
   87 |     int n = N, w = W;
      |                ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:113:16: warning: unused variable 'w' [-Wunused-variable]
  113 |     int n = N, w = W;
      |                ^
# Verdict Execution time Memory Grader output
1 Correct 3 ms 208 KB Output is correct
2 Correct 4 ms 208 KB Output is correct
3 Correct 4 ms 208 KB Output is correct
4 Correct 4 ms 324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 208 KB Output is correct
2 Correct 12 ms 208 KB Output is correct
3 Correct 12 ms 324 KB Output is correct
4 Correct 10 ms 208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 49 ms 328 KB Output is correct
2 Correct 56 ms 320 KB Output is correct
3 Correct 53 ms 348 KB Output is correct
4 Correct 50 ms 340 KB Output is correct
5 Correct 51 ms 344 KB Output is correct
6 Correct 53 ms 336 KB Output is correct
7 Correct 47 ms 336 KB Output is correct
8 Correct 52 ms 336 KB Output is correct
9 Correct 46 ms 340 KB Output is correct
10 Correct 48 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 208 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 33 ms 208 KB Output is partially correct
2 Incorrect 32 ms 324 KB Output isn't correct
3 Halted 0 ms 0 KB -