제출 #1235812

#제출 시각아이디문제언어결과실행 시간메모리
1235812mariza디지털 회로 (IOI22_circuit)C++20
0 / 100
1291 ms2162688 KiB
#include "circuit.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll n, m, a[1000];

vector<ll> t[1000];
pair<ll,ll> dfs(ll curr){
    // cout<<curr<<endl;
    if(curr>=n){
        if(a[curr-n]) return {0,1};
        else return {1,0};
    }
    else{
        ll a0, a1, b0, b1;
        tie(a0,a1)=dfs(t[curr][0]);
        tie(b0,b1)=dfs(t[curr][1]);
        return {2*a0*b0 + a0*b1 + a1*b0, a0*b1 + a1*b0 + 2*a1*b1};
    }
}

void init(int N, int M, vector<int> P, vector<int> A) {
    n=N;
    m=M;
    for(ll i=0; i<m; i++){
        a[i]=A[i];
    }
    for(ll i=1; i<n+m; i++){
        t[P[i]].push_back(i);
    }
}

int count_ways(int l, int r) {
    for(ll i=l-n; i<=r-n; i++){
        a[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...