제출 #786403

#제출 시각아이디문제언어결과실행 시간메모리
786403vjudge1Digital Circuit (IOI22_circuit)C++17
7 / 100
3056 ms3796 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; constexpr int mod = 1000002022; int N, M; vector<int> P, A; vector<vector<int>> ch; int add(int a, int b) { int c = a + b; if (c >= mod) { c -= mod; } return c; } int mul(int a, int b) { return 1LL * a * b % mod; } int sub(int a, int b) { int c = a - b; if (c < 0) { c += mod; } return c; } void init(int n, int m, vector<int> p, vector<int> a) { N = n, M = m; P = p, A = a; ch.resize(N); for (int i = 1; i < N + M; i++) { ch[P[i]].push_back(i); } } int count_ways(int L, int R) { for (int i = L; i <= R; i++) { A[i - N] ^= 1; } vector<int> tot(N + M), on(N + M), off(N + M); for (int i = N + M - 1; i >= 0; i--) { if (i >= N) { tot[i] = 1; if (A[i - N] == 0) { off[i] = 1; } else { on[i] = 1; } } else { int x = ch[i][0]; int y = ch[i][1]; tot[i] = mul(2, mul(tot[x], tot[y])); on[i] = add(mul(tot[x], on[y]), mul(tot[y], on[x])); off[i] = sub(tot[i], on[i]); } } return on[0]; }
#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...