全通り試して間に合う。
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;
}
};