結果
問題 | No.3 ビットすごろく |
ユーザー | machy |
提出日時 | 2015-06-11 22:08:19 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,072 bytes |
コンパイル時間 | 652 ms |
コンパイル使用メモリ | 79,316 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-01 07:24:24 |
合計ジャッジ時間 | 1,667 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include <iostream> #include <algorithm> #include <vector> #include <string> #include <cmath> #include <iomanip> #include <map> using namespace std; typedef long long LL; int main(){ int N; cin >> N; vector<int> prev, next; prev.push_back(0); vector<int> arrived(N); int cnt = 0; int ans = -1; if(N == 1) ans = 1; while(!prev.empty() && N >= 2){ cnt++; for(int i = 0; i < prev.size(); i++){ int pos = prev[i]; if(arrived[pos]) continue; arrived[pos] = 1; if(pos == N-1){ ans = cnt; break; } int n = pos+1; int bit_cnt = 0; while(n > 0){ bit_cnt += n%2; n /= 2; } if(pos-bit_cnt >= 0){ next.push_back(pos-bit_cnt); } if(pos+bit_cnt < N){ next.push_back(pos+bit_cnt); } } prev = next; next.clear(); } cout << ans << endl; return 0; }