Submission #1011203

#TimeUsernameProblemLanguageResultExecution timeMemory
1011203boris_mihovMechanical Doll (IOI18_doll)C++17
37 / 100
58 ms13356 KiB
#include "doll.h" #include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 400000 + 10; const int INF = 1e9; int n, m, cnt; std::vector <int> order; std::vector <int> prefix; std::vector <int> a, c, x, y; int reversed(int num, int bits) { int res = 0; for (int i = 0 ; i < bits ; ++i) { if (num & (1 << i)) { res |= (1 << bits - i - 1); } } return res; } void rec(int l, int r, int node) { if (prefix[r] - (l == 0 ? 0 : prefix[l - 1]) == 0) { x[node - 1] = -node; y[node - 1] = -1; return; } int mid = l + r >> 1; if (l != mid) { x[node - 1] = -(++cnt); rec(l, mid, -x[node - 1]); } else { x[node - 1] = order[l]; } if (mid + 1 != r) { y[node - 1] = -(++cnt); rec(mid + 1, r, -y[node - 1]); } else { y[node - 1] = order[r]; } } void create_circuit(int M, std::vector <int> A) { a = A; m = M; a.push_back(0); int bits = 0; int n = a.size(); while ((1 << bits) < n) { bits++; } order.resize(1 << bits, -1); prefix.resize(1 << bits); for (int i = 0 ; i < n - 1 ; ++i) { order[reversed(i, bits)] = a[i]; } order[(1 << bits) - 1] = 0; prefix[0] = (order[0] != -1); for (int i = 1 ; i < (1 << bits) ; ++i) { prefix[i] = prefix[i - 1] + (order[i] != -1); } x.resize(1 << bits); c.resize(m + 1); y.resize(1 << bits); c[0] = -(++cnt); for (int i = 1 ; i <= m ; ++i) { c[i] = -1; } rec(0, (1 << bits) - 1, 1); answer(c, x, y); while (x.size() > cnt) { x.pop_back(); y.pop_back(); } }

Compilation message (stderr)

doll.cpp: In function 'int reversed(int, int)':
doll.cpp:24:35: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   24 |             res |= (1 << bits - i - 1);
      |                          ~~~~~~~~~^~~
doll.cpp: In function 'void rec(int, int, int)':
doll.cpp:40:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   40 |     int mid = l + r >> 1;
      |               ~~^~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:98:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   98 |     while (x.size() > 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...