在[L , R] 的正整数区间内,要么包含3 要么包含 8 的不同的整数有多少个么? 只含3 或只含8 。
int bit[12] ;
int dp[12][2][2] ;
int DP(int pos , int three , int eight , int isend){
if(pos == -1) return three + eight == 1;
if(!isend && dp[pos][three][eight] != -1)
return dp[pos][three][eight] ;
int s = 0 ;
int d = isend ? bit[pos] : 9 ;
for(int i = 0 ; i <= d ; i++){
s += DP(pos-1 , three | (i==3) , eight | (i==8) , isend&&i==d) ;
}
if(!isend) dp[pos][three][eight] = s ;
return s ;
}
int answer(int x){
int len = 0 ;
while(x){
bit[len++] = x % 10 ;
x /= 10 ;
}
return DP(len - 1 , 0 , 0 , 1) ;
}
int main(){
int l , r , t ;
memset(dp , -1 , sizeof(dp)) ;
cin>>t ;
while(t--){
scanf("%d%d" ,&l , &r) ;
if(l > r) swap(l , r) ;
printf("%d\n" , answer(r)-answer(l-1) ) ;
}
return 0 ;
}