結果
問題 | No.3 ビットすごろく |
ユーザー | arrows |
提出日時 | 2015-06-02 11:38:46 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 751 bytes |
コンパイル時間 | 1,281 ms |
コンパイル使用メモリ | 163,052 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-01 07:23:12 |
合計ジャッジ時間 | 2,261 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define MAX_N 10001 #define INF (1<<29) int main(){ int N; int d[MAX_N]; cin >> N; for(int i = 1 ; i <= N ; i++){ d[i] = INF; } queue<int> Q; Q.push(1); d[1] = 1; bool found = false; while(!Q.empty()){ int v = Q.front(); Q.pop(); if(v == N){ cout << d[v] << endl; found = true; break; } int bit = __builtin_popcount(v); int to = v - bit, to2 = v + bit; if(1 <= to && to <= N){ if(d[v]+1 < d[to]){ d[to] = d[v]+1; Q.push(to); } } if(1 <= to2 && to2 <= N){ if(d[v]+1 < d[to2]){ d[to2] = d[v]+1; Q.push(to2); } } } if(!found){ cout << -1 << endl; } return 0; }