제출 #1212775

#제출 시각아이디문제언어결과실행 시간메모리
1212775qwushaDigital Circuit (IOI22_circuit)C++20
7 / 100
3010 ms2604 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; #define fi first #define se second typedef long long ll; typedef long double ld; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); int inf = 1e9; ll mod = 1000002022; vector<ll> a; ll n, m; vector<pair<ll, ll>> g; void init(int N, int M, vector<int> p, vector<int> A) { n = N; m = M; a.resize(m); for (ll i = 0; i < m; i++) { a[i] = A[i]; } g.resize(n, {-1, -1}); for (ll i = 1; i < p.size(); i++) { if (g[p[i]].fi == -1) { g[p[i]].fi = i; } else { g[p[i]].se = i; } } } int count_ways(int l, int r) { for (ll i = l - n; i <= r - n; i++) { a[i] = 1 - a[i]; } vector<pair<ll, ll>> dp(n + m, {0, 0}); for (ll i = 0; i < m; i++) { if (a[i] == 0) { dp[n + i].fi = 1; } else { dp[n + i].se = 1; } } for (ll i = n - 1; i >= 0; i--) { ll v = g[i].fi, u = g[i].se; dp[i].fi = ((dp[v].fi * dp[u].fi) * 2) % mod; dp[i].fi = (dp[i].fi + (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi)) % mod; dp[i].se = ((dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi)) % mod; dp[i].se = (dp[i].se + (dp[v].se * dp[u].se) * 2) % mod; } int ans = (dp[0].se % mod); return ans; } /* signed main() { int N, M; cin >> N >> M; vector<int> p(N + M), A(M); for (int i = 0; i < N + M; i++) { cin >> p[i]; } for (int i = 0; i < M; i++) { cin >> A[i]; } init(N,M,p,A); int res = count_ways(0, -1); cout << res << '\n'; }*/
#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...