diff --git a/cpp/2302/230218-CN.cpp b/cpp/2302/230218-CN.cpp new file mode 100644 index 0000000..38f5897 --- /dev/null +++ b/cpp/2302/230218-CN.cpp @@ -0,0 +1,69 @@ +#include +#include +#include +#include + +class CustomFunction { +public: + int f(int x, int y); +}; + +/** + * 1237. Find Positive Integer Solution for a Given Equation + * Given a callable function f(x, y) with a hidden formula and a value z, reverse engineer the formula and return all positive integer pairs x and y where f(x,y) == z. You may return the pairs in any order. + * + * While the exact formula is hidden, the function is monotonically increasing, i.e.: + * + * f(x, y) < f(x + 1, y) + * f(x, y) < f(x, y + 1) + * The function interface is defined like this: + * + * interface CustomFunction { + * public: + * // Returns some positive integer f(x, y) for two positive integers x and y based on a formula. + * int f(int x, int y); + * }; + * We will judge your solution as follows: + * + * The judge has a list of 9 hidden implementations of CustomFunction, along with a way to generate an answer key of all valid pairs for a specific z. + * The judge will receive two inputs: a function_id (to determine which implementation to test your code with), and the target z. + * The judge will call your findSolution and compare your results with the answer key. + * If your results match the answer key, your solution will be Accepted. + */ + +class Solution { +public: + static std::vector> findSolution(CustomFunction& cf, int z) { + std::vector p(1000); + std::iota(p.begin(), p.end(), 1); + auto L = std::lower_bound(p.begin(), p.end(), z, [&](int x, int y) { + return cf.f(x, 1000) < y; + }), R = std::upper_bound(p.begin(), p.end(), z, [&](int x, int y) { + return cf.f(y, 1) > x; + }); + std::vector> ret; + std::for_each(L, R, [&](int x) { + auto L2 = std::lower_bound(p.begin(), p.end(), z, [&](int m, int n) { + return cf.f(x, m) < n; + }), R2 = std::upper_bound(p.begin(), p.end(), z, [&](int m, int n) { + return cf.f(x, n) > m; + }); + std::for_each(L2, R2, [&](int y) { + ret.push_back({x, y}); + }); + }); + return ret; + } +}; + +int CustomFunction::f(int x, int y) { + return x * y; +} + +int main() { + CustomFunction f; + auto ret = Solution::findSolution(f, 5); + for (auto p : ret) + std::cout << p[0] << ", " << p[1] << std::endl; + return 0; +} diff --git a/cpp/2302/CMakeLists.txt b/cpp/2302/CMakeLists.txt new file mode 100644 index 0000000..fcef160 --- /dev/null +++ b/cpp/2302/CMakeLists.txt @@ -0,0 +1,6 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.24) +PROJECT(2302) + +SET(CMAKE_CXX_STANDARD 23) + +ADD_EXECUTABLE(2302 230218-CN.cpp) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 2231ba5..3415eac 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -16,7 +16,7 @@ ENDIF() # Optimisation # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Ofast -march=native -mtune=native -finline-functions -ffast-math -fomit-frame-pointer") -ADD_EXECUTABLE(leetcode-cpp main.cpp 2302/230218.cpp) +ADD_EXECUTABLE(leetcode-cpp main.cpp 2302/230218.cpp 2302/230218-CN.cpp) # ADD_SUBDIRECTORY(2112) # ADD_SUBDIRECTORY(2201) @@ -26,5 +26,6 @@ ADD_EXECUTABLE(leetcode-cpp main.cpp 2302/230218.cpp) # ADD_SUBDIRECTORY(2205) # ADD_SUBDIRECTORY(2206) # ADD_SUBDIRECTORY(2207) -ADD_SUBDIRECTORY(2210) +# ADD_SUBDIRECTORY(2210) +ADD_SUBDIRECTORY(2302) ADD_SUBDIRECTORY(more)