結果
問題 |
No.3276 Make Smaller Popcount
|
ユーザー |
![]() |
提出日時 | 2025-09-19 21:56:15 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,696 bytes |
コンパイル時間 | 3,436 ms |
コンパイル使用メモリ | 187,432 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-09-19 21:56:32 |
合計ジャッジ時間 | 16,822 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 5 WA * 23 |
ソースコード
#include <iostream> #include <vector> #include <bitset> #include <algorithm> #include <cmath> #include <atcoder/all> using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector<int>; using vvi = vector<vi>; using vvvi = vector<vvi>; using vll = vector<ll>; using vvll = vector<vll>; using vvvll = vector<vvll>; using vmi = vector<mint>; using vvmi = vector<vmi>; using vvvmi = vector<vvmi>; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) int main(){ int t; cin >> t; while(t--){ int n; cin >> n; bitset<32> bs(n); if(bs.count() == 1){ cout << -1 << endl; continue; } bool f = false; int tmp = 2e9; rep(i, 31){ if(bs[i] && bs[i+1]){ bitset<32> ans(0); rep(j, 32)ans[j] = (j == i) ? 1 : 0; tmp = ans.to_ulong(); f = true; break; } if(f)break; } int c = 0; rep(i, 32){ if(bs[i]){ c++; } if(c == 2){ if(bs[i+1]){ cout << tmp << endl; }else{ bitset<32> ans(0); ans[i+1] = 1; rep2(j, i+2, 32)ans[j] = bs[j]; cout << min(tmp, (int)ans.to_ulong() - n) << endl; } break; } } } return 0; }