#include #include #include using pythagoras = std::vector>; int generateTree(pythagoras & triangle, std::unordered_map & mappedInts, int sNumber){ bool numberFound = false; while(!numberFound){ std::vector newLine; newLine.emplace_back(1); for(size_t i = 1; i < triangle[triangle.size() - 1].size(); ++i){ newLine.emplace_back(triangle[triangle.size() - 1][i - 1] + triangle[triangle.size() - 1][i]); if(mappedInts.find(newLine[newLine.size() - 1]) == mappedInts.end()) mappedInts[newLine[newLine.size() - 1]] = triangle.size() + 1; if(newLine[newLine.size() - 1] == sNumber) numberFound = true; } newLine.emplace_back(1); triangle.emplace_back(newLine); } return triangle.size(); } int main() { pythagoras triangle({{1},{1, 1},{1,2,1}}); // -> generates the basic structure std::unordered_map mappedInts; mappedInts[1] = 1; mappedInts[2] = 3; int requests = 0; std::cin >> requests; while(requests){ 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; --requests; } return 0; }