結果

問題 No.2844 Birthday Party Decoration
ユーザー Tatsu_mrTatsu_mr
提出日時 2024-08-23 22:30:58
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 11 ms / 2,000 ms
コード長 1,151 bytes
コンパイル時間 2,104 ms
コンパイル使用メモリ 205,768 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-08-23 22:31:01
合計ジャッジ時間 2,569 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

using lint = long long;

lint INF = -3000000000000000000;

lint nearL(lint x, lint i) {
    lint a = (1LL << i), b = (1LL << (i + 1LL));
    if (x & a) {
        return x;
    }
    lint q = (x - (b - 1)) / b;
    if (b * q + (b - 1) > x) {
        q--;
    }
    lint res = b * q + (b - 1);
    return (res >= 0 ? res : INF);
}

lint nearR(lint x, lint i) {
    lint a = (1LL << i), b = (1LL << (i + 1LL));
    if (x & a) {
        return x;
    }
    lint q = (x - a) / b;
    if (b * q + a < x) {
        q++;
    }
    return b * q + a;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        lint n, x;
        cin >> n >> x;
        vector<lint> c(n);
        for (int i = 0; i < n; i++) {
            cin >> c[i];
        }
        vector<lint> l(n), r(n);
        for (int i = 0; i < n; i++) {
            l[i] = nearL(x, c[i]);
            r[i] = nearR(x, c[i]);
        }
        lint ml = *min_element(l.begin(), l.end()), mr = *max_element(r.begin(), r.end());
        lint dl = abs(x - ml), dr = abs(x - mr);
        cout << min({2 * dl + 2 * dr, 2 * dl, 2 * dr}) << endl;
    }
}
0