제출 #869750

#제출 시각아이디문제언어결과실행 시간메모리
869750Nonoze디지털 회로 (IOI22_circuit)C++17
0 / 100
3089 ms2097152 KiB
#include "circuit.h" //#include "stub.cpp" #include <bits/stdc++.h> using namespace std; const long long MOD=1000002020; vector<int> a; vector<int> adj[100005]; vector<pair<int, int>> memo; int n, m; pair<long long, long long> 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]); long long comp=0; comp+=(left.second*right.first)%MOD; comp+=(left.first*right.second)%MOD; return memo[s]={ (comp+(left.first*right.first*2LL)%MOD)%MOD, (comp+(left.second*right.second*2LL)%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...