제출 #388328

#제출 시각아이디문제언어결과실행 시간메모리
388328ryno자동 인형 (IOI18_doll)C++14
0 / 100
143 ms10144 KiB
#include <iostream> #include <algorithm> #include <vector> #include <math.h> #include "doll.h" using namespace std; vector<int> C, X, Y; bool toggled[4000005]; int lChild[4000005], rChild[4000005]; int S, MAX, ID = 1; void push(int node) { if (lChild[node] == 0) { ++ID; lChild[node] = ID; } if (rChild[node] == 0) { ++ID; rChild[node] = ID; } } int& getChild(int node) { if (toggled[node]) return rChild[node]; return lChild[node]; } bool _query(int val, int node = 1, int l = 1, int r = MAX) { if (l == r) { if (node < 10) throw 20; getChild(node) = val; toggled[node] ^= 1; return true; } else if (ID == S+1 && (lChild[node] == 0 || rChild[node] == 0)) { getChild(node) = 1; toggled[node] ^= 1; return false; // return _query(val, 1); } else { push(node); int m = (l + r) / 2; int child = getChild(node); toggled[node] ^= 1; if (child == 1) return false; // return _query(val, 1); if (child == lChild[node]) return _query(val, lChild[node], l, m); else if (child == rChild[node]) return _query(val, rChild[node], m + 1, r); return true; } } void query(int val) { do { continue; } while (!_query(val)); } void create_circuit(int M, vector<int> A) { int N = A.size(); C.push_back(A[0]); for (int i = 1; i <= M; ++i) C.push_back(-1); S = N + ceil(log2(N)); MAX = 1 << int(ceil(log2(N)-1)); for (int i = 1; i < 2 * MAX; ++i) { if (i < A.size()) query(-A[i]); else query(1); } query(0); for (int i = 1; i <= ID; ++i) { X.push_back(-lChild[i]); Y.push_back(-rChild[i]); } answer(C, X, Y); }

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

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:72:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |         if (i < A.size()) query(-A[i]);
      |             ~~^~~~~~~~~~
#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...