이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/* 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... |