解法
最初に以下の数字の中でLucky Numberはいくつあるかを計算しておき、両者が選べる数字の範囲について全探索すればいい。
コード
#include"bits/stdc++.h" using namespace std; using ll = int64_t; class TheLuckyGameDivTwo { public: int find(int a, int b, int jLen, int bLen) { vector<int> num(b + 1, 0); for (int i = 1; i <= b; i++) { num[i] = num[i - 1] + isLucky(i); } int ans = 0; for (int i = a; i <= b - jLen + 1; i++) { int tmp = INT_MAX; for (int j = i; j <= i + jLen - bLen; j++) { tmp = min(tmp, num[j + bLen - 1] - num[j - 1]); } ans = max(ans, tmp); } return ans; } private: bool isLucky(int n) { for (char c : to_string(n)) { if (c != '4' && c != '7') { return false; } } return true; } };