全通り試して間に合う。
- lli bt(lli m, lli n, bool almost)
- {
- if (m > n) return 0;
- lli ret = 1;
- ret += bt(m * 10LL + 4LL, n, almost);
- ret += bt(m * 10LL + 7LL, n, almost);
- if (!almost) {
- if (m) ret += bt(m * 10LL, n, true);
- for (lli i = 1; i <= 9; ++i) {
- if (i == 4 || i == 7) continue;
- ret += bt(m * 10LL + i, n, true);
- }
- }
- return ret;
- }
- class TheAlmostLuckyNumbersDivOne {
- public:
- long long find(long long a, long long b)
- {
- lli A = bt(0, a - 1, false);
- lli B = bt(0, b, false);
- return B - A;
- }
- };