#include #include class Solution { constexpr static int MOD = 1000000007; static void add_with_mod(std::vector &good, std::size_t i, int value) { good[i] = (good[i] + value) % MOD; } public: int countGoodStrings(int low, int high, int zero, int one) { assert(low <= high); std::vector good(high + 1, 0); good[0] = 1; for (int length = 1; length <= high; ++length) { if (length >= zero) { add_with_mod(good, length, good[length - zero]); } if (length >= one) { add_with_mod(good, length, good[length - one]); } } int total = 0; for (int i = low; i <= high; ++i) { total = (total + good[i]) % MOD; } return total; } }; int main() { Solution s; assert(s.countGoodStrings(3, 3, 1, 1) == 8); assert(s.countGoodStrings(2, 3, 1, 2) == 5); return 0; }