#define _USE_MATH_DEFINES //M_PI(π),M_SQRT2(√2) #include //std::cout, std::cin #include //std::string,std::to_string(C++11) #include //std::vector #include //std::valarray #include //std::sort #include //localtime_s #include //abs #include //abs,std::pow,sqrt,sin,cos,round,floor,ceil #include //std::ifstream,std::ofstream #include //std::setprecision,std::setw,std::setfill #include //std::random(C++11) #include //std::accumulate #include //std::greater #include //std::chrono(C++11) #include //std::bitset int main(void) { //std::ifstream in("123.txt"); //std::cin.rdbuf(in.rdbuf()); int N = 0; std::cin >> N; std::vector flg(N + 1, true); std::vector last_num, last_ID; int number = 0; int ID = 1; while (1) { number++; flg[ID] = false; if (ID == N) { break; } int move = std::bitset<32>(ID).count(); if (ID + move <= N && flg[ID + move]) { ID = ID + move; continue; } if (ID - move > 0 && flg[ID - move]) { last_ID.push_back(ID); last_num.push_back(number - 1); ID = ID - move; continue; } if (!last_ID.empty()) { ID = last_ID.back(); number = last_num.back(); last_ID.pop_back(); last_num.pop_back(); continue; } number = -1; break; } std::cout << number << std::endl; } //std::chrono::system_clock::time_point t_st = std::chrono::system_clock::now(); //std::chrono::system_clock::time_point t_ed = std::chrono::system_clock::now(); //std::cout << std::chrono::duration_cast(t_ed - t_st).count() << "ms" << std::endl;