結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-08-05 11:25:21 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 858 bytes |
| コンパイル時間 | 3,269 ms |
| コンパイル使用メモリ | 197,224 KB |
| 最終ジャッジ日時 | 2025-01-23 14:14:39 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <bits/stdc++.h>
using i64 = std::int64_t;
using vi64 = std::vector<i64>;
using qi64 = std::queue<i64>;
i64 popcnt(i64 n) { return __builtin_popcountll(n); }
int main() {
using namespace std;
const i64 inf = 100000000000;
i64 N; cin >> N;
vi64 ans(N + 1, inf);
ans[1] = 1;
qi64 que;
que.push(1);
while (que.size()) {
i64 now = que.front(); que.pop();
if (now == N) break;
i64 bitnow = popcnt(now);
if (now + bitnow <= N && ans[now + bitnow] > ans[now] + 1) {
ans[now + bitnow] = ans[now] + 1;
que.push(now + bitnow);
}
if (now - bitnow > 0 && ans[now - bitnow] > ans[now] + 1) {
ans[now - bitnow] = ans[now] + 1;
que.push(now - bitnow);
}
}
cout << (ans[N] == inf ? -1 : ans[N]) << endl;
return 0;
}