제출 #1236292

#제출 시각아이디문제언어결과실행 시간메모리
1236292AMel0n디지털 회로 (IOI22_circuit)C++20
4 / 100
772 ms15004 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define FOR(i,N) for(ll i = 0; i < N; i++) #define all(x) (x).begin(), (x).end() #define F first #define S second #include "circuit.h" const ll MOD = 1000002022; int N, M; vector<vector<int>> C; vector<int> A, P; vector<vector<ll>> dp; void dfs(int n) { if (n >= N) {dp[n][A[n-N]] = 1; dp[n][!A[n-N]] = 0; return ;} for(int c: C[n]) { dfs(c); } dp[n][0] = ((dp[C[n][0]][0] * dp[C[n][1]][1]) % MOD + (dp[C[n][0]][1] * dp[C[n][1]][0]) % MOD + (2 * dp[C[n][0]][0] * dp[C[n][1]][0]) % MOD) % MOD; dp[n][1] = ((dp[C[n][0]][0] * dp[C[n][1]][1]) % MOD + (dp[C[n][0]][1] * dp[C[n][1]][0]) % MOD + (2 * dp[C[n][0]][1] * dp[C[n][1]][1]) % MOD) % MOD; } void init(int N, int M, std::vector<int> P, std::vector<int> A) { ::N = N; ::M = M; ::A = A; ::P = P; C.resize(N+M); dp.resize(N+M, vector<ll>(2)); for(int i = 1; i < N+M; i++) C[P[i]].push_back(i); dfs(0); } int count_ways(int L, int R) { for(int i = L-N; i <= R-N; i++) A[i] = !A[i]; int n = L; dp[n][A[n-N]] = 1; dp[n][!A[n-N]] = 0; while(n != 0) { n = P[n]; dp[n][0] = ((dp[C[n][0]][0] * dp[C[n][1]][1]) % MOD + (dp[C[n][0]][1] * dp[C[n][1]][0]) % MOD + (2 * dp[C[n][0]][0] * dp[C[n][1]][0]) % MOD) % MOD; dp[n][1] = ((dp[C[n][0]][0] * dp[C[n][1]][1]) % MOD + (dp[C[n][0]][1] * dp[C[n][1]][0]) % MOD + (2 * dp[C[n][0]][1] * dp[C[n][1]][1]) % MOD) % MOD; } return dp[n][1] = ((dp[C[n][0]][0] * dp[C[n][1]][1]) % MOD + (dp[C[n][0]][1] * dp[C[n][1]][0]) % MOD + (2 * dp[C[n][0]][1] * dp[C[n][1]][1]) % MOD) % MOD; }
#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...