Submission #830819

#TimeUsernameProblemLanguageResultExecution timeMemory
830819beaconmcDigital Circuit (IOI22_circuit)C++17
2 / 100
3053 ms5216 KiB
#include "circuit.h" #include <bits/stdc++.h> typedef long long ll; using namespace std; #define FOR(i, x, y) for(ll i=x; i<y; i++) #define FORNEG(i, x, y) for(ll i=x; i>y; i--) #define fast() ios_base::sync_with_stdio(false);cin.tie(NULL) vector<ll> edges[100001]; ll possible[100001]; ll contrib[100001]; bool state[100001]; int initdfs(ll a){ if (edges[a].size() == 0) return possible[a] = 1; ll temp = 1; for (auto&i : edges[a]){ temp *= initdfs(i); temp %= 1000002022; } temp *= edges[a].size(); temp %= 1000002022; return possible[a] = temp; } ll n,m; void init(int N, int M, std::vector<int> P, std::vector<int> A) { n = N; m = M; FOR(i,1,N+M){ edges[P[i]].push_back(i); } FOR(i,N,N+M){ state[i] = A[i-N]; } initdfs(0); FOR(i,N,N+M){ ll temp = 1; ll cur = i; while (cur != 0){ temp *= (possible[P[cur]] / possible[cur] ) / edges[P[cur]].size(); temp %= 1000002022; cur = P[cur]; } contrib[i] = temp%1000002022; } } int count_ways(int L, int R) { FOR(i,L,R+1){ state[i] = (state[i]+1)%2; } ll ans = 0; FOR(i,n,n+m){ if (state[i]) ans += contrib[i]; } return ans%1000002022; }
#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...