結果
| 問題 | No.3 ビットすごろく |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-12-08 19:27:16 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 767 bytes |
| コンパイル時間 | 1,412 ms |
| コンパイル使用メモリ | 165,248 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-01 08:52:46 |
| 合計ジャッジ時間 | 2,400 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int INF = 1e9;
int d[10010];
vector<int> G[10010];
int main(void) {
int n;
cin >> n;
for (int i = 1; i < n; i++) {
int cnt = __builtin_popcount(i);
if (i - cnt >= 1) G[i].push_back(i - cnt);
if (i + cnt <= n) G[i].push_back(i + cnt);
}
queue<pii> que;
fill(d, d + n + 1, INF);
d[1] = 1;
que.push(pii(1, 1));
while (!que.empty()) {
pii p = que.front(); que.pop();
int v = p.second;
if (d[v] < p.first) continue;
for (int i = 0; i < G[v].size(); i++) {
int w = G[v][i];
if (d[w] <= d[v] + 1) continue;
d[w] = d[v] + 1;
que.push(pii(d[w], w));
}
}
cout << (d[n] == INF ? -1 : d[n]) << endl;
return 0;
}