제출 #876328

#제출 시각아이디문제언어결과실행 시간메모리
876328Halfjuice디지털 회로 (IOI22_circuit)C++17
0 / 100
14 ms10224 KiB
#include <vector> using namespace std; long modPow(long b, long e, long m) { b = b%m; long r = 1; while (e>0) { if (e%2 == 1) { r = (r*b) % m; } b = (b*b)%m; e >>= 1; } return r; } #define MOD 1000002022 typedef struct _Node { _Node* parent; vector<_Node*> children; int internalNodeCount; long contribCount; void initAny() { this->internalNodeCount = 0; this->contribCount = 0; for (auto it=children.begin(); it!=children.end(); it++) { (*it)->initAny(); if ((*it)->children.size() > 0) { internalNodeCount += (*it)->internalNodeCount+1; } } internalNodeCount += 1; } long searchPathUp(bool start, _Node* child) { long res = 1; if (!start) { res = modPow(2, internalNodeCount-1-child->internalNodeCount, MOD); } if (parent) { res = (res*parent->searchPathUp(false, this)) % MOD; } return res; } void initLeaf() { if (this->children.size() == 0) { contribCount = parent->searchPathUp(true, this); } } } Node; vector<Node> nodes; vector<int> state; long cur; int n, m; void init(int N, int M, vector<int> P, vector<int> A) { n = N; m = M; nodes.empty(); for (int i=0; i<N+M; i++) { nodes.push_back(move(Node())); if (P[i] == -1) { nodes[i].parent = 0; } else { nodes[i].parent = &nodes[P[i]]; nodes[P[i]].children.push_back(&nodes[i]); } } for (int i=0; i<N+M; i++) { nodes[i].initAny(); } for (int i=N; i<N+M; i++) { nodes[i].initLeaf(); } state = A; cur = 0; for (int i=0; i<M; i++) { cur = (cur + nodes[N+i].contribCount*state[i]) % MOD; } } int count_ways(int L, int R) { for (int i=L; i<R; i++) { if (state[i]) { state[i] = 0; cur = (cur - nodes[n+i].contribCount) % MOD; } else { state[i] = 1; cur = (cur + nodes[n+i].contribCount) % MOD; } } if (cur < 0) { cur = cur + MOD; } return cur; }

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

circuit.cpp: In function 'void init(int, int, std::vector<int>, std::vector<int>)':
circuit.cpp:68:16: warning: ignoring return value of 'bool std::vector<_Tp, _Alloc>::empty() const [with _Tp = _Node; _Alloc = std::allocator<_Node>]', declared with attribute 'nodiscard' [-Wunused-result]
   68 |     nodes.empty();
      |     ~~~~~~~~~~~^~
In file included from /usr/include/c++/10/vector:67,
                 from circuit.cpp:2:
/usr/include/c++/10/bits/stl_vector.h:1007:7: note: declared here
 1007 |       empty() const _GLIBCXX_NOEXCEPT
      |       ^~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...