Submission #330483

#TimeUsernameProblemLanguageResultExecution timeMemory
330483aquablitz11Mechanical Doll (IOI18_doll)C++14
100 / 100
139 ms9936 KiB
#include <bits/stdc++.h> #include "doll.h" using namespace std; const int INF = 2e9; vector<int> C, X, Y; int cnt = 0; int get_switch(int x, int y) { X.push_back(x); Y.push_back(y); return --cnt; } int create_tree(const vector<int> &v) { bool ok = true; for (int i = 0; i < (int)v.size()-1; ++i) { if (v[i] != v[i+1]) ok = false; } if (ok) return v[0]; vector<int> vx, vy; for (int i = 0; i < v.size(); ++i) { if (i % 2 == 0) vx.push_back(v[i]); else vy.push_back(v[i]); } int x = create_tree(vx); int y = create_tree(vy); return get_switch(x, y); } int reverse_bit(int k, int a) { int b = 0; while (k--) { b <<= 1; b |= (a&1); a >>= 1; } return b; } void create_circuit(int M, vector<int> A) { // find k int n = A.size(); int k = 0; while ((1<<k) < n) ++k; vector<int> v(1<<k, 0); for (int i = 0; i < (1<<k)-n; ++i) v[reverse_bit(k, i)] = INF; int cnt = 0; for (int i = 1; i < n; ++i) { while (cnt < v.size() && v[cnt] != 0) ++cnt; v[cnt] = A[i]; } n = 1<<k; v[n-1] = 0; int r = create_tree(v); C = vector<int>(M+1, r); C[0] = A[0]; for (auto &x: X) { if (x == INF) x = r; } for (auto &y: Y) { if (y == INF) y = r; } answer(C, X, Y); }

Compilation message (stderr)

doll.cpp: In function 'int create_tree(const std::vector<int>&)':
doll.cpp:25:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |     for (int i = 0; i < v.size(); ++i) {
      |                     ~~^~~~~~~~~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:60:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |         while (cnt < v.size() && v[cnt] != 0) ++cnt;
      |                ~~~~^~~~~~~~~~
#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...