Submission #653471

#TimeUsernameProblemLanguageResultExecution timeMemory
653471Lobo디지털 회로 (IOI22_circuit)C++17
2 / 100
9 ms2256 KiB
#include "circuit.h" #include<bits/stdc++.h> using namespace std; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() const int maxn = 2010; const int mod = 1000002022; int n, m, p[maxn], a[maxn]; vector<int> g[maxn]; int c[maxn], pw2[maxn], prd[maxn]; void dfssz(int u) { c[u] = 1; if(u >= n) return; for(auto v : g[u]) { dfssz(v); c[u] = c[u]+c[v]%mod; } } void dfs(int u) { vector<int> pf(g[u].size()+1), sf(g[u].size()+1); for(int i = 0; i < (int) g[u].size(); i++) { int v = g[u][i]; pf[i] = c[v]; if(i!=0) pf[i] = pf[i]*pf[i-1]%mod; } for(int i = (int) g[u].size()-1; i >= 0; i--) { int v = g[u][i]; sf[i] = c[v]; if(i != (int) g[u].size()-1) sf[i] = sf[i]*sf[i+1]; } for(int i = 0; i < (int) g[u].size(); i++) { int v = g[u][i]; prd[v] = prd[u]; if(i != 0) prd[v] = prd[v]*pf[i-1]; if(i != (int) g[u].size()-1) prd[v] = prd[v]*sf[i+1]; } for(auto v : g[u]) { dfs(v); } } void init(int32_t N, int32_t M, vector<int32_t> P, vector<int32_t> A) { n = N; m = M; for(int i = 1; i < n+m; i++) { p[i] = P[i]; g[p[i]].pb(i); } for(int i = 0; i < m; i++) { a[i] = A[i]; } pw2[0] = 1; for(int i = 1; i <= n+m; i++) { pw2[i] = pw2[i-1]*2%mod; } dfssz(0); prd[0] = 1; dfs(0); for(int i = 0; i < n+m; i++) { // cout << i << " = " << c[i] << " " << prd[i] << endl; } } int32_t count_ways(int32_t L, int32_t R) { for(int i = L; i <= R; i++) a[i-n]^=1; int ans = 0; for(int i = n; i < n+m; i++) { // cout << i << " - " << a[i-n] << " " << prd[i] << endl; ans+= a[i-n]*prd[i]; ans%= 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...