Submission #1235568

#TimeUsernameProblemLanguageResultExecution timeMemory
1235568Sir_Ahmed_ImranDigital Circuit (IOI22_circuit)C++17
18 / 100
3043 ms7296 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; #define MAXN 200001 #define nl '\n' #define ff first #define ss second #define ll long long #define ld long double #define terminator main #define pll pair<ll,ll> #define add insert #define append push_back #define pii pair<int,int> #define all(x) (x).begin(),(x).end() const int mod = 1000002022; int add(int a, int b){ return (a + b) % mod; } int mul(int a, int b){ return (1ll * a * b) % mod; } int n; int p[MAXN]; int cnt[MAXN]; int dp[MAXN][2]; vector<int> a[MAXN]; void dfs(int v){ int N = 0; vector<int> cnt {1}; for(auto & i : a[v]){ if(i < n) dfs(i); cnt.append(0); for(int j = N; j >= 0; j--){ cnt[j + 1] = add(cnt[j + 1], mul(cnt[j], dp[i][1])); cnt[j] = mul(cnt[j], dp[i][0]); } N++; } dp[v][0] = dp[v][1] = 0; for(int i = 0; i <= N; i++){ dp[v][0] = add(dp[v][0], mul(cnt[i], N - i)); dp[v][1] = add(dp[v][1], mul(cnt[i], i)); cnt[i] = 0; } } void init(int N, int M, vector<int> P, vector<int> A) { n = N; for(int i = 1; i < P.size(); i++){ p[i] = P[i]; a[p[i]].append(i); } for(int i = 0; i < M; i++) dp[i + n][A[i]] = 1; cnt[0] = 1; } int count_ways(int l, int r){ for(int i = l; i <= r; i++) swap(dp[i][0], dp[i][1]); dfs(0); return dp[0][1]; }
#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...