Submission #891324

#TimeUsernameProblemLanguageResultExecution timeMemory
891324loliconMonster Game (JOI21_monster)C++17
10 / 100
108 ms4432 KiB
#include <bits/stdc++.h>
#include "monster.h"
using namespace std;

static vector<vector<int>> table;
static int n;

bool query(int a, int b) {
    if(table[a][b] != -1) return table[a][b];
    bool res = Query(a, b);
    table[a][b] = res ? 1 : 0;
    table[b][a] = res ? 0 : 1;
    return res;
}

bool test(int a, int b) {
    bool res = query(a, b);    
    int cnta = 0, cntb = 0;
    for(int i = 0; i < n; ++i) {
        if(i != a && query(a, i)) cnta++;
        if(i != b && query(b, i)) cntb++;
    }
    if(cnta == cntb) 
        return !res;
    if(!res && cnta == cntb+1)
        return !res;
    if(res && cnta+1 == cntb)
        return !res;
    return res;
    // static int arr[] = {3, 1, 4, 2, 0};
    // return arr[a] > arr[b];
}

void merge_sort(int l, int r, vector<int> &arr, vector<int> &buf) {
    if(r - l <= 1) return;
    int mid = (l + r) >> 1;
    merge_sort(l, mid, arr, buf);
    merge_sort(mid, r, arr, buf);
    int i, j, idx = l;
    for(i = l, j = mid; i < mid; ++i) {
        while(j < r && test(arr[i], arr[j])) {
            buf[idx++] = arr[j++];
        }
        buf[idx++] = arr[i];
    }
    while(j < r) buf[idx++] = arr[j++];
    for(idx = l; idx < r; ++idx)
        arr[idx] = buf[idx];
}

vector<int> Solve(int N) {
    vector<int> arr(N), buf(N);
    table.resize(N); n = N;
    for(int i = 0; i < N; ++i) 
        table[i].assign(N, -1);
    for(int i = 0; i < N; ++i) 
        arr[i] = i;
    merge_sort(0, N, arr, buf);
    vector<int> ret(N);
    for(int i = 0; i < N; ++i)  
        ret[arr[i]] = i;
    return ret;
}


#ifdef local

int main() {
    auto ans = Solve(5);
    for(int i = 0; i < 5; ++i) {
        printf("%d%c", ans[i], " \n"[i == 4]);
    }
    return 0;
}

#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...