Submission #627651

#TimeUsernameProblemLanguageResultExecution timeMemory
627651ash7728Digital Circuit (IOI22_circuit)C++17
2 / 100
3079 ms4928 KiB
#include "circuit.h" #include <bits/stdc++.h> #define N 100020 #define f first #define s second #define pb push_back #define mp make_pair #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() using namespace std; const int mod = 1000002022; int yes[N], no[N], state[N],pai[N], n,m; vector<int> grafo[N]; void multiply(vector<int>& poly, int x){ if(poly.empty()){ poly = {no[x], yes[x]}; return; } vector<int> ans; for(int i = 0; i < sz(poly); i++){ int A = (1LL*poly[i]*no[x])%mod; int B = 0; if(i >= 1) B = (1LL*poly[i-1]*yes[x])%mod; ans.pb((A+B)%mod); } ans.pb( (1LL*poly.back()*yes[x])%mod); poly = ans; } void solve(int x){ yes[x] = no[x] = 0; if(x >= n){ yes[x] = state[x]; no[x] = (1-state[x]); return; } vector<int> poly; int sum_cost = -1, C = sz(grafo[x]); for(auto v: grafo[x]){ solve(v); if(sum_cost == -1){ sum_cost = no[v] + yes[v]; yes[x] = yes[v]; no[x] = no[v]; continue; } int old_yes = yes[x]; yes[x] = (1LL*(old_yes)*no[v])%mod; yes[x] += (1LL*(old_yes + sum_cost)*yes[v])%mod; yes[x] %= mod; sum_cost = (1LL*sum_cost*(yes[v] + no[v]))%mod; } no[x] = (1LL*C*sum_cost - yes[x])%mod; no[x] = (no[x] + mod)%mod; } void init(int n_, int m_, vector<int> P, vector<int> A) { n = n_, m = m_; for(int i = 1; i < n+m; i++){ grafo[P[i]].pb(i); pai[i] = P[i]; } for(int i = 0;i<m;i++) state[i+n] = A[i]; } int count_ways(int L, int R) { for(int i = L; i <= R; i++) state[i] ^= 1; solve(0); return yes[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...