so easy~~~~
AC代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
long long dp[2][2][10][50];
int M, length;
int digit[50];
long long DFS( int pre0, int statu, int pos, int prenum ){
if( pos < 0 ){
if( pre0 ){
return 0;
}else{
return 1;
}
}
if( !statu && dp[pre0][statu][pos][prenum] != -1 ){
return dp[pre0][statu][pos][prenum];
}
long long ans = 0;
int last = statu ? digit[pos] : 9;
for( int i = 0; i <= last; i++ ){
if( pre0 ){
ans += DFS( pre0 && i == 0, statu && i == last, pos - 1, i );
}else{
if( abs( prenum - i ) >= M ){
ans += DFS( pre0 && i == 0, statu && i == last, pos - 1, i );
}
}
}
return dp[pre0][statu][pos][prenum] = ans;
}
long long solve( long long N ){
length = 0;
while( N ){
digit[length++] = N % 10;
N /= 10;
}
return DFS( 1, 1, length - 1, 0 );
}
int main(){
long long T, a, b;
cin >> T;
while( T-- ){
cin >> a >> b >> M;
memset( dp, -1, sizeof( dp ) );
cout << solve( b ) - solve( a - 1 ) << endl;
}
return 0;
}