Submission #583302

#TimeUsernameProblemLanguageResultExecution timeMemory
583302JomnoiJousting tournament (IOI12_tournament)C++17
17 / 100
1070 ms1868 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 5005;

pair <int, int> table[MAX_N][12];

int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) {
    vector <pair <int, int>> order, vec, tmp;
    for(int i = 0; i < N; i++) {
        vec.emplace_back(i, i);
    }
    for(int c = 0; c < C; c++) {
        int s = S[c], e = E[c];

        tmp.clear();
        for(int i = 0; i < s; i++) {
            tmp.push_back(vec[i]);
        }
        tmp.emplace_back(vec[s].first, vec[e].second);
        S[c] = tmp.back().first;
        E[c] = tmp.back().second;
        for(int i = e + 1; i < vec.size(); i++) {
            tmp.push_back(vec[i]);
        }
        vec = tmp;
    }

    int max_win = -1, best_pos = 0;
    for(int p = 0; p < N; p++) {
        order.clear();
        int j = 0;
        for(int i = 0; i < p; i++) {
            order.emplace_back(K[j++], i);
        }
        order.emplace_back(R, p);
        while(j < N - 1) {
            order.emplace_back(K[j++], j + 1);
        }

        for(int i = 0; i < N; i++) {
            table[i][0] = order[i];
        }
        for(int j = 1; j < 12; j++) {
            for(int i = 0; i + (1<<j) - 1 < N; i++) {
                table[i][j] = max(table[i][j - 1], table[i + (1<<(j - 1))][j - 1]);
            }
        }

        int cnt_win = 0;
        for(int c = 0; c < C; c++) {
            int j = log2(E[c] - S[c] + 1);
            int winner = (max(table[S[c]][j], table[E[c] - (1<<j) + 1][j])).second;

            if(winner == p) {
                cnt_win++;
            }
        }

        if(max_win < cnt_win) {
            max_win = cnt_win;
            best_pos = p;
        }
    }
    return best_pos;
}

Compilation message (stderr)

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:23:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |         for(int i = e + 1; i < vec.size(); i++) {
      |                            ~~^~~~~~~~~~~~
tournament.cpp:38:35: warning: operation on 'j' may be undefined [-Wsequence-point]
   38 |             order.emplace_back(K[j++], j + 1);
      |                                  ~^~
tournament.cpp:38:35: warning: operation on 'j' may be undefined [-Wsequence-point]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...