Submission #132845

#TimeUsernameProblemLanguageResultExecution timeMemory
132845muradeynPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
3 ms504 KiB
/* Murad Eynizade */

#include <bits/stdc++.h>
#define intt long long
#define fyck ios_base::sync_with_stdio(0);cin.tie(0);
#define F first
#define S second
//#define endl '\n'

using namespace std;

int len;

intt a , b;

intt dp[20][11][11][2];

string s;

intt solve(int i,int d1,int d2,int f) {
    //cout<<i<<" "<<d1<<" "<<d2<<" "<<f<<endl;
    if (dp[i][d1][d2][f] != -1)return dp[i][d1][d2][f];
    if (i == len) return dp[i][d1][d2][f] = f;
    intt ret = 0;
    int til;
    if (f) til = 9;
    else til = s[i] - '0';
    for (int in = 0;in<=til;in++) {
        if ((d1 != 10 && in == d1) || (d2 != 10 && in == d2) )continue;
        if (in == 0 && d2 == 10 && i != len - 1)continue;
        int nf = f;
        nf |= (in < s[i] - '0');
        nf |= (in == 10);
        ret += solve(i + 1 , d2 , in , nf);
    }
    if (d2 == 10 && i != len - 1) ret += solve(i + 1 , d2 , d2 , 1);
    return dp[i][d1][d2][f] = ret;
}

intt get(intt x) {
    memset(dp , -1 , sizeof(dp));
    s = "";
    len = 0;
    while (x) {
        s += x % 10 + '0';
        x /= 10;
        len++;
    }
    reverse(s.begin(),s.end());
    return solve(0 , 10 , 10 , 0);
}

int main() {
    fyck
    cin>>a>>b;
    cout<<get(b + 1) - get(a)<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...