제출 #756717

#제출 시각아이디문제언어결과실행 시간메모리
756717boris_mihov자동 인형 (IOI18_doll)C++17
37 / 100
719 ms13352 KiB
#include <algorithm> #include <iostream> #include <cassert> #include <numeric> #include <vector> #include "doll.h" typedef long long llong; const int MAXN = 1000000 + 10; const int MAXS = 1000000 + 10; const int INF = 1e9; int n, m, cnt; std::vector <int> a, x, y, c; int perm[MAXN]; int treeRoot; void rec(int l, int r, int root) { assert(l != r); if (l + 1 == r) { if (perm[l] < a.size()) y[root - 1] = a[perm[l]]; else y[root - 1] = -treeRoot; if (perm[r] < a.size()) x[root - 1] = a[perm[r]]; else x[root - 1] = -treeRoot; return; } int mid = (l + r) / 2; x.push_back(0); x.push_back(0); y.push_back(0); y.push_back(0); cnt += 2; y[root - 1] = -(cnt - 1); x[root - 1] = -cnt; rec(l, mid, -y[root - 1]); rec(mid + 1, r, -x[root - 1]); } int reversed(int x, int bits) { int res = 0; for (int i = 0 ; i < bits ; ++i) { if (x & (1 << i)) { res |= (1 << bits - 1 - i); } } return res; } void create_circuit(int M, std::vector <int> A) { m = M; n = A.size(); A.push_back(0); a = A; c.resize(m + 1); if (a.size() == 1) { c[a[0]] = 0; } else { for (int i = 0 ; i <= m ; ++i) { c[i] = -1; } int sz = 1, bits = 0; while (sz < a.size()) { sz <<= 1; bits++; } x.push_back(0); y.push_back(0); std::reverse(a.begin(), a.end()); std::iota(perm, perm + sz, 0); std::sort(perm, perm + sz, [&](int x, int y) { return reversed(x, bits) < reversed(y, bits); }); cnt++; treeRoot = cnt; rec(0, sz - 1, cnt); } answer(c, x, y); }

컴파일 시 표준 에러 (stderr) 메시지

doll.cpp: In function 'void rec(int, int, int)':
doll.cpp:23:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |         if (perm[l] < a.size()) y[root - 1] = a[perm[l]];
      |             ~~~~~~~~^~~~~~~~~~
doll.cpp:26:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         if (perm[r] < a.size()) x[root - 1] = a[perm[r]];
      |             ~~~~~~~~^~~~~~~~~~
doll.cpp: In function 'int reversed(int, int)':
doll.cpp:51:35: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   51 |             res |= (1 << bits - 1 - i);
      |                          ~~~~~~~~~^~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:74:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |         while (sz < a.size())
      |                ~~~^~~~~~~~~~
#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...