Submission #637143

#TimeUsernameProblemLanguageResultExecution timeMemory
637143Fidan디지털 회로 (IOI22_circuit)C++17
9 / 100
3046 ms5720 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; typedef long long ll; const ll mod=1000002022; ll n, m; vector<ll> p, a; vector<vector<ll>> v; vector<ll> k; vector<ll> s; vector<ll> pw(2010); void init(int N, int M, vector<int> P, vector<int> A){ n=N; m=M; for(ll i=0; i<n+m; i++){ p.push_back(P[i]); a.push_back(A[i]); } v.resize(n+m); for(ll i=1; i<n+m; i++){ v[p[i]].push_back(i); } k.resize(n+m); s.resize(n+m); pw[0]=1; for(ll i=1; i<2010; i++){ pw[i]=(pw[i-1]*2)%mod; } } void solve(int x){ k[x]=0; if(x>=n){ k[x]=a[x-n]; s[x]=0; return; } solve(v[x][0]); solve(v[x][1]); k[x]=((k[v[x][0]]*pw[s[v[x][1]]])%mod+(k[v[x][1]]*pw[s[v[x][0]]])%mod)%mod; s[x]=s[v[x][0]]+s[v[x][1]]+1; return; } int count_ways(int l, int r){ if(n==1){ ll sum=0; for(ll i=l-n; i<=r-n; i++){ a[i]=1-a[i]; } for(ll i=0; i<m; i++){ if(a[i]==1) sum++; } return sum; } for(ll i=l-n; i<=r-n; i++){ a[i]=1-a[i]; } solve(0); return int(k[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...