結果

問題 No.2844 Birthday Party Decoration
ユーザー Today03Today03
提出日時 2024-08-25 20:30:30
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 10 ms / 2,000 ms
コード長 999 bytes
コンパイル時間 2,011 ms
コンパイル使用メモリ 203,168 KB
実行使用メモリ 6,940 KB
最終ジャッジ日時 2024-08-25 20:30:33
合計ジャッジ時間 2,770 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 10 ms
6,940 KB
testcase_02 AC 10 ms
6,940 KB
testcase_03 AC 10 ms
6,940 KB
testcase_04 AC 9 ms
6,940 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 1e9 + 10;
const ll INFL = 4e18;

ll solve() {
    int N;
    ll X;
    cin >> N >> X;
    vector<int> C;
    for (int i = 0, x; i < N; i++) {
        int c;
        cin >> c;
        if (int x = X >> c & 1; !x) {
            C.push_back(c);
        }
    }
    N = C.size();

    if (N == 0) {
        return 0;
    }

    int t = C.back();
    ll ans = INFL;

    // 大きい方向に買いに行く Xより大きい、t bitが立っているような最小の整数
    // goal/(2^t)=奇数
    {
        ll goal = (X / (1ll << t) + 1) * (1ll << t);
        ans = min(ans, (goal - X) * 2);
    }
    // 小さい方向
    // goal/(2^t)=奇数,(goal+1)/(2^t)=偶数
    if (X / (1ll << t) > 0) {
        ll goal = (X / (1ll << t)) * (1ll << t) - 1;
        ans = min(ans, (X - goal) * 2);
    }

    return ans;
}

int main() {
    int T;
    cin >> T;

    while (T--) {
        cout << solve() << endl;
    }
}
0