Submission #1221717

#TimeUsernameProblemLanguageResultExecution timeMemory
1221717TrustfulcomicMonster Game (JOI21_monster)C++20
10 / 100
69 ms1780 KiB
#include "monster.h"
#include <bits/stdc++.h>

using namespace std;
typedef pair<int,int> ii;

map<ii, bool> mem;
bool my_query(int a, int b) {
    if (mem.find({a,b}) != mem.end()) {
        return mem[{a,b}];
    } else if (mem.find({b,a}) != mem.end()) {
        return !mem[{b,a}];
    } else {
        bool res = Query(a, b);
        mem[{a,b}] = res;
        return res;
    }
}

std::vector<int> Solve(int N) {
    std::vector<int> T(N);

    vector<int> up;
    vector<int> down;

    for (int i = 0; i < N; i++) {
        int wins = 0;
        for (int j = 0; j<N; j++) {
            if (i == j) continue;
            if (my_query(i,j)) wins++;
        }

        if (wins == N-2) {
            up.push_back(i);
        } else if (wins == 1) {
            down.push_back(i);
        } else {
            T[i] = wins;
        }
    }

    if (my_query(up[0], up[1])) {
        T[up[0]] = N-2;
        T[up[1]] = N-1;
    } else {
        T[up[0]] = N-1;
        T[up[1]] = N-2;
    }

    if (my_query(down[0], down[1])) {
        T[down[0]] = 0;
        T[down[1]] = 1;
    } else {
        T[down[0]] = 1;
        T[down[1]] = 0;
    }
    

    return T;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...