結果

問題 No.2152 [Cherry Anniversary 2] 19 Petals of Cherry
ユーザー suisensuisen
提出日時 2022-12-24 03:18:30
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 53 ms / 1,000 ms
コード長 919 bytes
コンパイル時間 639 ms
コンパイル使用メモリ 72,624 KB
実行使用メモリ 11,836 KB
最終ジャッジ日時 2024-11-18 05:06:56
合計ジャッジ時間 4,322 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 49
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <array>
#include <iostream>
#include <vector>

constexpr int N = 19;

std::array<std::array<uint64_t, 1 << N>, 2> dp{};

int main() {
    std::array<uint32_t, N> a{};
    for (int i = 0; i < N; ++i) {
        int l;
        std::cin >> l;
        for (int j = 0; j < l; ++j) {
            int v;
            std::cin >> v;
            a[i] |= 1u << (v - 1);
        }
    }

    dp[0][0] = 1;
    for (int s = 1; s < 1 << N; ++s) {
        int pc = __builtin_popcount(s);

        int z = 0;
        for (int i = N - 1; i >= 0; --i) {
            int b = 1 << i;
            if (s & b) {
                if (a[pc - 1] & b) {
                    for (int pz : { 0, 1 }) {
                        dp[pz ^ z][s] += dp[pz][s ^ (1 << i)];
                    }
                }
                z ^= 1;
            }
        }
    }
    std::cout << dp[0].back() << ' ' << dp[1].back() << std::endl;
    return 0;
}
0