This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/* 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |