Submission #630128

#TimeUsernameProblemLanguageResultExecution timeMemory
630128flashmtDigital Circuit (IOI22_circuit)C++17
18 / 100
3008 ms15012 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; const int BASE = 1e9 + 2022; const int N = 100100; int n, m; vector<int> a[N]; vector<int> states; vector<long long> coef, ways; long long ans; void dfsWay(int x) { if (empty(a[x])) return; for (int y : a[x]) { dfsWay(y); ways[x] *= ways[y]; ways[x] %= BASE; } ways[x] *= size(a[x]); ways[x] %= BASE; } void dfsCoef(int x) { vector<long long> prefix(size(a[x])); for (int i = 0; i < size(a[x]); i++) { prefix[i] = ways[a[x][i]]; if (i) prefix[i] = prefix[i] * prefix[i - 1] % BASE; } long long suffix = 1; for (int i = int(size(a[x])) - 1; i >= 0; i--) { int y = a[x][i]; coef[y] = suffix; if (i) coef[y] = coef[y] * prefix[i - 1] % BASE; suffix *= ways[y]; suffix %= BASE; } for (int y : a[x]) { coef[y] = coef[y] * coef[x] % BASE; dfsCoef(y); } } void init(int N, int M, vector<int> P, vector<int> A) { n = N; m = M; for (int i = 1; i < n + m; i++) a[P[i]].push_back(i); states = A; ways.assign(n + m, 1); dfsWay(0); coef.assign(n + m, 1); dfsCoef(0); for (int i = 0; i < m; i++) if (states[i]) ans = (ans + coef[n + i]) % BASE; } int count_ways(int L, int R) { for (int i = L; i <= R; i++) { states[i - n] ^= 1; if (states[i - n]) ans = (ans + coef[i]) % BASE; else ans = (ans - coef[i] + BASE) % BASE; } return ans; }

Compilation message (stderr)

circuit.cpp: In function 'void dfsCoef(int)':
circuit.cpp:30:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |   for (int i = 0; i < size(a[x]); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...