結果
問題 | No.2844 Birthday Party Decoration |
ユーザー | Tatsu_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 |
ソースコード
#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; } }