結果

問題 No.803 Very Limited Xor Subset
コンテスト
ユーザー 梧桐
提出日時 2026-01-27 00:54:03
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
結果
RE  
実行時間 -
コード長 1,247 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 748 ms
コンパイル使用メモリ 82,040 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2026-01-27 00:54:11
合計ジャッジ時間 7,175 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 12 WA * 2 RE * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>

using namespace std;

const int N = 22, M = 300;

struct Limit {
    int op, l, r;
};

int n, m, x, a[N], ans;
Limit limits[M];

int main() {
    // freopen("xor.in", "r", stdin);
    // freopen("xor.out", "w", stdout);

    scanf("%d%d%d", &n, &m, &x);
    for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    for (int i = 1; i <= m; ++i) {
        scanf("%d%d%d", &limits[i].op, &limits[i].l, &limits[i].r);
    }

    for (int i = 0; i < 1 << n; ++i) {
        int cnt = 0;
        for (int j = 0; j < n; ++j) {
            if (i & (1 << j)) {
                cnt ^= a[j + 1];
            }
        }
        if (cnt != x) continue;
        bool ok = true;
        for (int j = 1; j <= m; ++j) {
            cnt = 0;
            for (int k = limits[j].l - 1; k <= limits[j].r - 1; ++k) {
                if (i & (1 << k)) ++cnt;
            }
            if (limits[j].op == 0) {
                if (cnt % 2 != 0) {
                    ok = false;
                    break;
                }
            } else {
                if (cnt % 2 == 0) {
                    ok = false;
                    break;
                }
            }
        }
        if (ok) ++ans;
    }

    printf("%d\n", ans);

    return 0;
}
0