Submission #1299038

#TimeUsernameProblemLanguageResultExecution timeMemory
1299038daotuankhoiPalindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
1 ms640 KiB
#include <bits/stdc++.h>

using namespace std;

#define fi first
#define se second
#define ll long long

template <class T> bool ckmax(T &a, T b) { return a < b ? (a = b, true) : false; }
template <class T> bool ckmin(T &a, T b) { return a > b ? (a = b, true) : false; }

int d[20];
ll dp[20][11][11][2];

ll solve(int pos, int tight, int l1, int l2, bool start) {
    if (pos < 0) return 1;
    if (!tight && dp[pos][l1][l2][start] != -1) return dp[pos][l1][l2][start];
    ll res = 0;
    int lim = tight ? d[pos] : 9;
    for (int i = 0; i <= lim; i++) {
        if (i != l1 && i != l2) {
            bool nx = start || i > 0;
            res += solve(pos - 1, tight && i == lim, (nx ? l2 : 10), (nx ? i : 10), nx);
        }
    }
    if (!tight) dp[pos][l1][l2][start] = res;
    return res;
}

ll calc(ll x) {
    if (x < 0) return 0;
    int n = 0;
    d[0] = 0;
    while (x) {
        d[n++] = x % 10;
        x /= 10;
    }
    return solve(n - 1, 1, 10, 10, 0);
}

int main() {
    #define NAME "test"
    if (fopen(NAME".inp", "r")) {
        freopen(NAME".inp", "r", stdin);
        freopen(NAME".out", "w", stdout);
    }
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    memset(dp, -1, sizeof dp);
    ll l, r; cin >> l >> r;
    cout << calc(r) - calc(l - 1) << '\n';
    return 0;
}

Compilation message (stderr)

numbers.cpp: In function 'int main()':
numbers.cpp:44:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |         freopen(NAME".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
numbers.cpp:45:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |         freopen(NAME".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...