제출 #817761

#제출 시각아이디문제언어결과실행 시간메모리
817761vjudge1Palindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
1 ms392 KiB
#include <bits/stdc++.h>
using namespace std;

int v[20];
int64_t f[20][2][2][11][11];

int64_t DP(int i, int lo, int iz, int prv, int prv2) {
        if (i == 20) return 1;
        int64_t& res = f[i][lo][iz][prv + 1][prv2 + 1];
        if (lo && res != -1) return res;
        int lim = lo ? 9 : v[i];
        int64_t ans = 0;
        for (int d = 0; d <= lim; d++) {
                int niz = iz || (d > 0);
                if (d != prv2 && d != prv) ans += DP(i + 1, lo || (d < lim), niz, niz ? d : -1, prv);
        }
        if (lo) res = ans;
        return ans;
}

int64_t solve(int64_t x) {
        for (int i = 19; i >= 0; i--) v[i] = x % 10, x /= 10;
        return DP(0, 0, 0, -1, -1);
}

int32_t main() {
        ios_base::sync_with_stdio(0);
        cin.tie(0);
        int64_t a, b;
        cin >> a >> b;
        a--;
        memset(f, -1, sizeof f);
        cout << solve(b) - solve(a);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...