#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 400005
#define ff first
#define ss second
#define pb push_back
#define sz(s) (int)s.size()
ll n, t, a[N], m, ret, l, r, dp[20][10][10][10][10];
ll solve(int pos,int last_dig,int pre_last_digit,int flag,int big_flag) {
if(pos == 20) {
return 1;
}
ll ret = dp[pos][last_dig][pre_last_digit][flag][big_flag];
if(~ret) {
return ret;
}
ret = 0;
/*
flag: 0 baslamady
flag: 1 baslanymdan bir sifr gecdi
flag: 2 baslanymdan bir sifrdan kop boldy
bigflag: eger prefix-in hemmesi den bolsa onda 0 else 1
*/
for(int i = 0; i < 10; i++) {
if(flag >= 1 && last_dig == i) continue;
if(flag == 2 && pre_last_digit == i) continue;
if(big_flag == 0 && i > a[pos]) continue;
int new_big_flag = (big_flag | (i < a[pos]));
int new_flag = min(2,flag + (flag | (i != 0)));
ret += solve(pos + 1,i,last_dig,new_flag,new_big_flag);
}
dp[pos][last_dig][pre_last_digit][flag][big_flag] = ret;
return ret;
}
ll f(ll x){
if(x < 0)
return 0;
memset(dp,-1,sizeof dp);
for(int i = 19; i >= 0; i--) {
a[i] = x % 10;
x /= 10;
}
return solve(0,0,0,0,0);
}
int main () {
ios::sync_with_stdio(0);cin.tie(0);
cin >> l >> r;
cout << f(r) - f(l-1) <<'\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |