답안 #1074587

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1074587 2024-08-25T11:19:24 Z Zicrus 디지털 회로 (IOI22_circuit) C++17
0 / 100
3000 ms 3924 KB
#include <bits/stdc++.h>
#include "circuit.h"
using namespace std;

typedef long long ll;

int n, m;
vector<int> p, a, mark;
vector<vector<int>> adj;
vector<vector<ll>> dp;

ll getDp(int state, int i) {
    if (i >= n) return state == a[i-n];
    return dp[state][i];
}

void update(int i) {
    ll numOff = 0, numOn = 0;
    for (ll mask = 0; mask < (1ll << adj[i].size()); mask++) {
        ll valOff = adj[i].size() - __builtin_popcount(mask);
        ll valOn = __builtin_popcount(mask);
        for (int b = 0; b < adj[i].size(); b++) {
            valOff *= getDp((mask >> b) & 1, adj[i][b]);
            valOn *= getDp((mask >> b) & 1, adj[i][b]);
            valOff %= 1000002022;
            valOn %= 1000002022;
        }
        numOff += valOff;
        numOn += valOn;
        numOff %= 1000002022;
        numOn %= 1000002022;
    }
    dp[0][i] = numOff;
    dp[1][i] = numOn;
}

void init(int N, int M, vector<int> P, vector<int> A) {
    n = N, m = M; p = P; a = A;
    mark = vector<int>(n);
    adj = vector<vector<int>>(n);
    dp = vector<vector<ll>>(2, vector<ll>(n));
    for (int i = 1; i < n+m; i++) {
        adj[p[i]].push_back(i);
    }
    for (int i = n-1; i >= 0; i--) {
        update(i);
    }
}

int count_ways(int L, int R) {
    L -= n; R -= n;
    
    for (int i = L; i <= R; i++) {
        a[i] = !a[i];
    }
    ll res = 0;
    for (auto &e : a) res += e;
    return res;
}

#ifdef TEST
#include "grader.cpp"
#endif

Compilation message

circuit.cpp: In function 'void update(int)':
circuit.cpp:22:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |         for (int b = 0; b < adj[i].size(); b++) {
      |                         ~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 18 ms 344 KB Output is correct
4 Execution timed out 3068 ms 344 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '52130940', found: '128'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 18 ms 344 KB Output is correct
4 Execution timed out 3068 ms 344 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1463 ms 3924 KB 1st lines differ - on the 1st token, expected: '431985922', found: '16402'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1463 ms 3924 KB 1st lines differ - on the 1st token, expected: '431985922', found: '16402'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 0 ms 344 KB 1st lines differ - on the 1st token, expected: '52130940', found: '128'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 18 ms 344 KB Output is correct
4 Execution timed out 3068 ms 344 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 18 ms 344 KB Output is correct
4 Execution timed out 3068 ms 344 KB Time limit exceeded
5 Halted 0 ms 0 KB -