#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |