【题目链接】
【算法】
f[i][j]表示第i位,数位和对10取模余j的数的个数
状态转移,计算答案都比较简单,笔者不再赘述
【代码】
#include<bits/stdc++.h>
using namespace std;
#define MAXL 20 long long i,T,n,m;
long long dp[MAXL][],a[MAXL]; template <typename T> inline void read(T &x) {
long long f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x) {
if (x < ) { putchar('-'); x = -x; }
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x) {
write(x);
puts("");
}
inline void getdp() {
long long i,j,k;
dp[][] = ;
for (i = ; i <= MAXL; i++) {
for (j = ; j < ; j++) {
for (k = ; k < ; k++) {
dp[i][(j+k)%] += dp[i-][j];
}
}
}
}
inline long long calc(long long n) {
long long i,j,ans = ,sum = ;
a[] = ;
while (n) {
a[++a[]] = n % ;
n /= ;
}
for (i = a[]; i >= ; i--) {
for (j = ; j < a[i]; j++) {
ans += dp[i-][(-((sum+j)%))%];
}
sum = (sum + a[i]) % ;
}
return ans;
} int main() { getdp(); read(T);
for (i = ; i <= T; i++) {
read(n); read(m);
cout<< "Case #"<<i<<": "<<calc(m+)-calc(n)<<endl;
} return ; }