Submission #1212765

#TimeUsernameProblemLanguageResultExecution timeMemory
1212765qwushaDigital Circuit (IOI22_circuit)C++20
0 / 100
6 ms1192 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; #define fi first #define se second typedef long long ll; typedef long double ld; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); int inf = 1e9; ll mod = 1000002022; vector<ll> a; ll n, m; vector<pair<ll, ll>> g; void init(int N, int M, vector<int> p, vector<int> A) { g.resize(n, {-1, -1}); for (int i = 1; i < p.size(); i++) { if (g[p[i]].fi == -1) { g[p[i]].se = i; } else { g[p[i]].fi = i; } } a.resize(m); for (int i = 0; i < m; i++) { a[i] = A[i]; } n = N; m = M; } int count_ways(int l, int r) { for (int i = l - n; i <= r - n; i++) { a[i] = 1 - a[i]; } vector<pair<int, int>> dp(n + m, {0, 0}); for (int i = 0; i < m; i++) { if (a[i] == 0) { dp[n + i].fi = 1; } else { dp[n + 1].se = 1; } } for (int i = n - 1; i >= 0; i++) { int v = g[i].fi, u = g[i].se; dp[i].fi += (dp[v].fi * dp[u].fi) * 2; dp[i].fi += (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi); dp[i].se += (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi); dp[i].se += (dp[v].se * dp[u].se) * 2; } return dp[0].se; }
#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...