#include #include #include struct Row{ std::vector row; int index; }; void printTriangle(Row & triangle){ for(auto & num : triangle.row){ std::cout << num << " "; } std::cout << std::endl; } int generateTree(Row & triangle, std::unordered_map & mappedInts, size_t sNumber){ bool numberFound = false; bool add = true; while(!numberFound){ ++triangle.index; std::vector newLine; newLine.emplace_back(1); for(size_t i = 1; i < triangle.row.size(); ++i){ size_t sum = triangle.row[i - 1] + triangle.row[i]; if(sum > 1000000000){ add = false; break; } newLine.emplace_back(sum); // if(mappedInts.find(newLine[newLine.size() - 1]) == mappedInts.end()) // mappedInts[newLine[newLine.size() - 1]] = triangle.row.size() + 1; if(sum == sNumber) numberFound = true; } if(newLine.size() == 2){ // printTriangle(triangle); return (int)sNumber + 1; } if(add) newLine.emplace_back(1); triangle.row = newLine; } return triangle.index; } int main() { std::unordered_map mappedInts; mappedInts[1] = 1; mappedInts[2] = 3; int requests = 0; std::cin >> requests; while(requests){ Row triangle; triangle.row = {1,2,1}; triangle.index = 3; int cell = 0; std::cin >> cell; if(mappedInts.find(cell) == mappedInts.end()) std::cout << generateTree(triangle, mappedInts, cell) << std::endl; else std::cout << mappedInts[cell] << std::endl; // printTriangle(triangle); --requests; } return 0; }