제출 #680908

#제출 시각아이디문제언어결과실행 시간메모리
680908AngusWong디지털 회로 (IOI22_circuit)C++17
7 / 100
3097 ms8136 KiB
#include "circuit.h" #include <bits/stdc++.h> #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define f first #define s second using namespace std; const ll mod=1000002022LL; const ll N=2e5+9; ll n, m, p[N], a[N]; pll dp[N]; vector<ll> v[N]; void init(int N, int M, vector<int> P, vector<int> A) { n=N, m=M; for (int i=0; i<n+m; i++) p[i]=P[i]; for (int i=0; i<m; i++) a[i+n]=A[i]; for (int i=1; i<n+m; i++) v[p[i]].push_back(i); } void dfs(ll x){ if (x>=n){ if (a[x]) dp[x]={1, 0}; else dp[x]={0, 1}; return; } for (ll i: v[x]) dfs(i); dp[x].f=(dp[v[x][0]].f*dp[v[x][1]].s%mod+dp[v[x][0]].s*dp[v[x][1]].f%mod+dp[v[x][0]].f*dp[v[x][1]].f*2%mod)%mod; dp[x].s=(dp[v[x][0]].f*dp[v[x][1]].s%mod+dp[v[x][0]].s*dp[v[x][1]].f%mod+dp[v[x][0]].s*dp[v[x][1]].s*2%mod)%mod; } int count_ways(int L, int R) { for (int i=L; i<=R; i++) a[i]^=1; dfs(0); return dp[0].f; }
#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...