Submission #333192

#TimeUsernameProblemLanguageResultExecution timeMemory
333192couplefireMechanical Doll (IOI18_doll)C++17
100 / 100
165 ms13212 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
#define INF 1000000009

void create_circuit(int m, vector<int> events) {
    events.push_back(0);
    int n = events.size();
    int numLvl = ceil(log2(0.0+n));
    int curNum = n;
    vector<vector<int>> num(numLvl);
    for(int i = numLvl-1; i>=0; i--){
        num[i].resize(curNum = (curNum+1)/2);
    }
    int label = 1;
    vector<int> ch[2];
    ch[0] = vector<int>(2*n, -INF);
    ch[1] = vector<int>(2*n, -INF);
    vector<int> state(2*n, 0);
    for(int i = 0; i<numLvl; i++){
        for(int j = 0; j<num[i].size(); j++) num[i][j] = label++; 
    }
    for(int i = 0; i<numLvl-1; i++){
        int cur = 0;
        for(int j = 0; j<num[i].size(); j++){
            if(cur >= num[i+1].size()-1){
                ch[0][num[i][j]] = 1;
                ch[1][num[i][j]] = num[i+1][cur];
                continue;
            }
            ch[0][num[i][j]] = num[i+1][cur++];
            ch[1][num[i][j]] = num[i+1][cur++];
        }
    }
    if(n%2 == 1){
        ch[0][label-1] = 1;
    }
    for(int i = 0; i<n; i++){
        int v = 1;
        while(ch[state[v]][v] != -INF){
            int t = v;
            v = ch[state[v]][v];
            state[t] = 1-state[t];
        }
        ch[state[v]][v] = -events[i];
        state[v] = 1-state[v];
    }
    vector<int> C(m+1);
    for(int i = 0; i<=m; i++){
        C[i] = -1;
    }
    vector<int> X, Y;
    for(int i = 1; i<label; i++){
        X.push_back(-ch[0][i]);
        Y.push_back(-ch[1][i]);
    }
    answer(C, X, Y);
}

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:21:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         for(int j = 0; j<num[i].size(); j++) num[i][j] = label++;
      |                        ~^~~~~~~~~~~~~~
doll.cpp:25:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |         for(int j = 0; j<num[i].size(); j++){
      |                        ~^~~~~~~~~~~~~~
doll.cpp:26:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |             if(cur >= num[i+1].size()-1){
      |                ~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...