結果
| 問題 |
No.2844 Birthday Party Decoration
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-08-23 22:16:46 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 19 ms / 2,000 ms |
| コード長 | 2,154 bytes |
| コンパイル時間 | 2,231 ms |
| コンパイル使用メモリ | 200,488 KB |
| 最終ジャッジ日時 | 2025-02-23 23:57:48 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 4 |
ソースコード
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
int main() {
cin.tie(0); cout.tie(0);
ios::sync_with_stdio(false);
int T;
cin >> T;
while(T--) {
int N;
long long X;
cin >> N >> X;
vector<int> c(60);
vector<long long> L, R;
for(int i = 0; i < N; i++) {
int t;
cin >> t;
if(X >> t & 1) {
continue;
}
long long Y = (long long) 1 << (t + 1);
long long Z = (long long) 1 << t;
long long r = (X / Z + 1) * Z;
long long l = X / Y * Y - 1;
if(l < 0) {
l = r;
}
L.emplace_back(l);
R.emplace_back(r);
}
int sz = L.size();
if(sz == 0) {
cout << 0 << '\n';
} else {
long long ans = 8000000000000000000;
for(int i = 0; i < sz; i++) {
for(int j = 0; j < sz; j++) {
long long l = L[i];
long long r = R[j];
if(l > r) {
continue;
}
if(i == j) {
bool fn = true;
for(int k = 0; k < sz; k++) {
if(l <= L[k] && L[k] <= X) {
continue;
}
fn = false;
}
if(fn) {
ans = min(ans, (X - l) * 2);
}
fn = true;
for(int k = 0; k < sz; k++) {
if(X <= R[k] && R[k] <= r) {
continue;
}
fn = false;
}
if(fn) {
ans = min(ans, (r - X) * 2);
}
} else {
bool fn = true;
for(int k = 0; k < sz; k++) {
if((l <= L[k] && L[k] <= r) || (l <= R[k] && R[k] <= r)) {
continue;
}
fn = false;
}
if(fn) {
if(r <= X) {
ans = min(ans, (X - l) * 2);
} else if(l >= X) {
ans = min(ans, (r - X) * 2);
} else {
ans = min(ans, (r - l) * 2);
}
}
}
}
}
cout << ans << '\n';
}
}
return 0;
}