Submission #1221786

#TimeUsernameProblemLanguageResultExecution timeMemory
1221786svtkMonster Game (JOI21_monster)C++20
10 / 100
59 ms2316 KiB
#include "monster.h"
#include <algorithm>
using namespace std;
using pii = pair<int, int>;

bool asked[1000][1000];
bool ans[1000][1000];
bool query(int a, int b){
    if(!asked[a][b]){
        asked[a][b] = true;
        asked[b][a] = true;
        ans[a][b] = Query(a, b);
        ans[b][a] = not ans[a][b];
    }
    return ans[a][b];
}

pii wins[1000];

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

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

    for(int i=0; i<N; i++){
        for(int j=i+1; j<N; j++){
            if(query(i, j)){
                wins[i].first++;
            } else {
                wins[j].first++;
            }
        }
    }
    sort(wins, wins+N);
    for(int i=0; i<N; i++){
        T[wins[i].second] = i;
    }
    int l1 = wins[0].second;
    int l2 = wins[1].second;
    int w1 = wins[N-1].second;
    int w2 = wins[N-2].second;
    if(query(l2, l1)){
        T[l1] = 1;
        T[l2] = 0;
    }
    if(query(w1, w2)){
        T[w1] = N-2;
        T[w2] = N-1;
    }

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