/* * 003_sample.cpp * * No.3 ビットすごろく * 難易度2 */ #include #include #include using int64 = long long; static const int INF = 1e9+7; int bitCounter(int x) { auto count = 0; while (x > 0) { if (x%2 == 1) { count++; } x /= 2; } return count; } int main () { int n = 0; std::cin >> n; int x[10010] = {}; std::queue que; que.push(1); std::vector vec(n+1, INF); vec[1] = 1; while (!que.empty()) { auto now = que.front(); que.pop(); auto bit = bitCounter(now); if (now - bit > 0 && vec[now - bit] == INF) { vec[now - bit] = vec[now] + 1; que.emplace(now - bit); } if (now + bit <= n && vec[now + bit] == INF) { vec[now + bit] = vec[now] + 1; que.emplace(now + bit); } } std::cout << (vec[n] < INF ? vec[n] : -1) << std::endl; return 0; }