Submission #1212769

#TimeUsernameProblemLanguageResultExecution timeMemory
1212769qwushaDigital 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 (ll 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 (ll i = 0; i < m; i++) { a[i] = A[i]; } n = N; m = M; } int count_ways(int l, int r) { for (ll i = l - n; i <= r - n; i++) { a[i] = 1 - a[i]; } vector<pair<ll, ll>> dp(n + m, {0, 0}); for (ll i = 0; i < m; i++) { if (a[i] == 0) { dp[n + i].fi = 1; } else { dp[n + 1].se = 1; } } for (ll i = n - 1; i >= 0; i++) { ll v = g[i].fi, u = g[i].se; dp[i].fi = ((dp[v].fi * dp[u].fi) * 2) % mod; dp[i].fi = (dp[i].fi + (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi)) % mod; dp[i].se = ((dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi)) % mod; dp[i].se = (dp[i].se + (dp[v].se * dp[u].se) * 2) % mod; } int ans = (dp[0].se % mod); return ans; }
#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...