結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-08-05 11:23:33 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 785 bytes |
| コンパイル時間 | 2,011 ms |
| コンパイル使用メモリ | 198,792 KB |
| 最終ジャッジ日時 | 2025-01-23 14:14:31 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 4 MLE * 28 |
ソースコード
#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;
}