Submission #800080

#TimeUsernameProblemLanguageResultExecution timeMemory
800080fatemetmhrMonster Game (JOI21_monster)C++17
10 / 100
179 ms4484 KiB
// Be name khoda //

#include "monster.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

#define all(x) x.begin(), x.end()
#define pb     push_back
#define fi     first
#define se     second
#define mp     make_pair

namespace {

const int maxn5 = 2e3 + 10;

int cnt[maxn5], st[maxn5][maxn5];

void msort(vector <int> &a){
    if(a.size() <= 1)
        return;
    if(a.size() == 3){
    }
    int pt = 0;
    vector <int> av1, av2;
    for(int i = 0; i < a.size(); i++) if(i != pt){
        if(Query(a[i], a[pt]))
            av2.pb(a[i]);
        else
            av1.pb(a[i]);
    }
    msort(av1);
    msort(av2);
    if(av1.size() && av2.size() && Query(av1.back(), av2[0]))
        swap(av1[int(av1.size()) - 1], av2[0]);
    int keep = a[pt];
    a.clear();
    for(auto u : av1)
        a.pb(u);
    a.pb(keep);
    for(auto u : av2)
        a.pb(u);
}

bool cmp(int i, int j){return cnt[i] < cnt[j];}


}  // namespace

std::vector<int> Solve(int n) {

    vector <int> ret(n), a(n);
    for(int i = 0; i < n; i++)
        a[i] = i;
    for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++){
        st[i][j] = Query(i, j);
        st[j][i] = st[i][j] ^ 1;
    }
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++) if(i != j)
            cnt[i] += st[i][j];
    sort(all(a), cmp);
    /*
    for(int i = 0; i < n; i++)
        cout << cnt[i] << ' ';
    cout << endl;
    for(int i = 0; i < n; i++)
        cout << a[i] << ' ';
    cout << endl;
    */
    if(n == 4){
        if(st[a[0]][a[2]] || st[a[0]][a[3]])
            swap(a[0], a[1]);
    }
    if(!st[a[1]][a[2]] && n > 4)
        swap(a[0], a[1]);
    if(st[a[n - 2]][a[n - 3]])
        swap(a[n - 1], a[n - 2]);
    /*
    for(int i = 0; i < n; i++)
        cout << a[i] << ' ';
    cout << endl;
    */
    for(int i = 0; i < n; i++){
        ret[a[i]] = i;
    }
    return ret;
}

Compilation message (stderr)

monster.cpp: In function 'void {anonymous}::msort(std::vector<int>&)':
monster.cpp:29:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(int i = 0; i < a.size(); i++) if(i != pt){
      |                    ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...