From 05e7b41d06f108a19df58e2d0872fea07b8614ea Mon Sep 17 00:00:00 2001 From: Lam Haoyin Date: Mon, 24 Jan 2022 09:40:42 +0800 Subject: [PATCH] add: 220123 --- 2201/220123.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2201/CMakeLists.txt | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 2201/220123.cpp diff --git a/2201/220123.cpp b/2201/220123.cpp new file mode 100644 index 0000000..bbadfc2 --- /dev/null +++ b/2201/220123.cpp @@ -0,0 +1,44 @@ +#include +#include + +template +struct TableGenerator { + int answer[50] {}; + int size = 0; + + constexpr TableGenerator() : answer(), size(0) { + auto gen = [](int begin, int digits) { + int ret = begin; + for (int i = 1; i < digits; ++i) { + ret = 10 * ret + (i + begin); + } + return ret; + }; + int digitsL = 0, beginL, ans = 0; + for (int i = L; i; i /= 10) { + ++digitsL; + beginL = i; + } + for (int d = digitsL, lim = std::min(R, 123456789); ans < lim; ++d) { + for (int b = (d == digitsL) ? beginL : 1; ans < lim && b + d <= 10; ++b) { + answer[size++] = ans = gen(b, d); + } + } + } +}; + +class Solution { +private: + inline static constexpr TableGenerator<10, 1000000000> table; +public: + static std::vector sequentialDigits(int low, int high) { + return {std::lower_bound(table.answer, table.answer + table.size, low), std::lower_bound(table.answer, table.answer + table.size, 1 + high)}; + } +}; + +int main() { + auto ret = Solution::sequentialDigits(1000, 123456789); + for (int i : ret) + std::printf("%d\n", i); + return 0; +} diff --git a/2201/CMakeLists.txt b/2201/CMakeLists.txt index f6bfbfa..e77ea1a 100644 --- a/2201/CMakeLists.txt +++ b/2201/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2201) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2201 220123-CN.cpp) +ADD_EXECUTABLE(2201 220123.cpp)