Submission #869746

#TimeUsernameProblemLanguageResultExecution timeMemory
869746NonozeDigital Circuit (IOI22_circuit)C++17
0 / 100
3006 ms2097152 KiB
#include "circuit.h" //#include "stub.cpp" #include <bits/stdc++.h> using namespace std; const long long MOD=1000002020; int fastMod(int n) { long long pow2 = 2; long long result = 1; while(n > 0){ if(n&1){ result = (result * pow2) % MOD; } n/=2; pow2 = (pow2 * pow2) % MOD; } return result; } vector<int> a; vector<int> adj[100005]; vector<pair<int, int>> memo; int n, m; pair<int, int> dfs(int s) { if (s>=n) { return {a[s-n], a[s-n]^1}; } if (memo[s].first!=-1) return memo[s]; auto left=dfs(adj[s][0]); auto right=dfs(adj[s][1]); int comp=0; comp+=(left.second*right.first)%MOD; comp+=(left.first*right.second)%MOD; return memo[s]={ (comp+(left.first*right.first*2)%MOD)%MOD, (comp+(left.second*right.second*2)%MOD)%MOD }; } void init(int N, int M, vector<int> p, vector<int> aa) { a=aa; n=N, m=M; for (int i=1; i<n+m; i++) { adj[p[i]].push_back(i); } } int count_ways(int L, int R) { for (int i=L; i<=R; i++) { a[i-n]^=1; } memo.clear(); memo.resize(n, {-1, -1}); return dfs(0).first; }
#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...