제출 #824314

#제출 시각아이디문제언어결과실행 시간메모리
824314vjudge1Digital Circuit (IOI22_circuit)C++17
18 / 100
11 ms2008 KiB
#include "circuit.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> adj[2010];
int state[2010], n, m;
void init(int N, int M, vector<int> P, vector<int> A) {
  n=N;
  m=M;
  for(int i = 0; i < M; i++)
    state[i+N] = A[i];
  for(int i = 1; i < n+m; i++)
    adj[P[i]].push_back(i);
}
pair<long long, long long> dfs(int N) {
  if(N>=n) {
    return {!state[N], state[N]};
  }
  long long dp[1+adj[N].size()]{}, c = adj[N].size();
  dp[0] = 1;
  for(auto i: adj[N]) {
    int a, b;
    tie(a,b)=dfs(i);
    for(int  j= c+1; --j;)
      dp[j] = (a*dp[j]+b*dp[j-1])%1000002022;
    dp[0] = dp[0]*a%1000002022;
  }
  long long ans1=0, ans2=0;
  for(int i = 0; i <= c; i++)
    ans1+=(c-i)*dp[i], ans2+=i*dp[i];
  return {ans1%1000002022, ans2%1000002022};
}
int count_ways(int L, int R) {
  for(int i = L; i <= R; i++) {
    state[i]^=1;
  }
  return dfs(0).second;
}
#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...