답안 #800195

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
800195 2023-08-01T11:38:46 Z fatemetmhr Monster Game (JOI21_monster) C++17
0 / 100
101 ms 6056 KB
// Be name khoda //

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

using namespace std;

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


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];

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

void msort(vector <int> &a){
    if(a.size() <= 1)
        return;
    if(a.size() <= 10){
        int n = a.size();
        for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++){
            st[a[i]][a[j]] = Query(a[i], a[j]);
            st[a[j]][a[i]] = st[i][j] ^ 1;
        }
        for(int i = 0; i < n; i++){
            cnt[a[i]] = 0;
            for(int j = 0; j < n; j++) if(i != j)
                cnt[a[i]] += st[a[i]][a[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(cnt[a[0]] == cnt[a[1]] && st[a[1]][a[0]])
            swap(a[0], a[1]);
        if(cnt[a[n - 1]] == cnt[a[n - 2]] && st[a[n - 1]][a[n - 2]])
            swap(a[n - 1], a[n - 2]);
        return;
    }
    int pt = rng() % int(a.size());
    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]);
    }
    if(min(av1.size(), av2.size()) < 4){
        msort(a);
        return;
    }
    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);
}



}  // namespace

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

    vector <int> ret(n), a(n);
    for(int i = 0; i < n; i++)
        a[i] = i;
    msort(a);
    /*
    for(int i = 0; i < n; i++)
        cout << cnt[i] << ' ';
    cout << endl;
    for(int i = 0; i < n; i++)
        cout << a[i] << ' ';
    cout << endl;
    //*/
    /*
    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

monster.cpp: In function 'void {anonymous}::msort(std::vector<int>&)':
monster.cpp:58:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     for(int i = 0; i < a.size(); i++) if(i != pt){
      |                    ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 0 ms 208 KB Output is correct
3 Correct 0 ms 208 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 1 ms 208 KB Output is correct
6 Correct 0 ms 288 KB Output is correct
7 Correct 0 ms 336 KB Output is correct
8 Correct 0 ms 336 KB Output is correct
9 Correct 0 ms 336 KB Output is correct
10 Correct 1 ms 316 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 0 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Incorrect 17 ms 1084 KB Wrong Answer [3]
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 0 ms 208 KB Output is correct
3 Correct 0 ms 208 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 1 ms 208 KB Output is correct
6 Correct 0 ms 288 KB Output is correct
7 Correct 0 ms 336 KB Output is correct
8 Correct 0 ms 336 KB Output is correct
9 Correct 0 ms 336 KB Output is correct
10 Correct 1 ms 316 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 0 ms 336 KB Output is correct
13 Correct 1 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Incorrect 17 ms 1084 KB Wrong Answer [3]
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 101 ms 6056 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -