Submission #1159174

#TimeUsernameProblemLanguageResultExecution timeMemory
1159174BolatuluDigital Circuit (IOI22_circuit)C++20
0 / 100
3029 ms9764 KiB
#include "circuit.h"
#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")   
#pragma GCC target("avx,avx2,fma")  
#pragma GCC optimize("unroll-loops") 
#pragma GCC optimize("inline")

#define pb push_back
#define eb emplace_back
#define md ((tl + tr) >> 1)
#define TL v + v, tl, md
#define TR v + v + 1, md + 1, tr
#define all(x) (x).begin(), (x).end()
#define F first
#define S second

using namespace std;

typedef long long ll;

const int N = 3e5 + 7;
const ll M = 1000002022;
const ll INF = 1e18 + 7;  

ll mod(ll a, ll b = M) {
    if (a < 0)
        a = b + a % b;
    return a % b;
}

int n, m, p[N], a[N];
ll ans[N], dp[1001][1001];
vector <int> g[N];

void dfs(int v) {
    int c = g[v].size();
    for (auto to : g[v])
        dfs(to);
    if (g[v].empty())
        ans[v] = a[v];
    else {
        dp[0][0] = 1;
        for (int i = 1;i <= c;i++) {
            dp[i][0] = dp[i - 1][0];
            for (int j = 1;j <= c;j++) {
                dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - 1] * ans[g[v][j - 1]] % M) % M;
            }
        }
        for (int i = c;i >= 1;i--) {
            ans[v] = (ans[v] + dp[c][i]) % M;
        }
    }
}

void init(int N, int M, vector <int> P, vector <int> A) {
    n = N, m = M;
    for (int i = 2;i <= n + m;i++) {
        p[i] = P[i - 1] + 1;
        g[p[i]].pb(i);
    }
    for (int i = n + 1;i <= n + m;i++)
        a[i] = A[i - 1 - n];
}

int count_ways(int L, int R) {
    L++, R++;
    for (int j = L;j <= R;j++)
        a[j] ^= 1;
    dfs(1);
    return ans[1];
}

// void solve() {
//     int n, m, q;
//     cin >> n >> m >> q;
//     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);
//     while (q--) {
//         int l, r;
//         cin >> l >> r;
//         cout << count_ways(l, r) << '\n';
//     }
// }

// signed main() {
//     solve();
//     return 0;
// }        
#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...