fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Codechef
  6. {
  7. public static void main (String[] args) throws java.lang.Exception
  8. {
  9. // your code goes here
  10. Scanner sc=new Scanner(System.in);
  11. int t=sc.nextInt();
  12. while(t-->0){
  13. long l=sc.nextLong();
  14. long r=sc.nextLong();
  15. int mod=sc.nextInt();
  16. int k=sc.nextInt();
  17. System.out.println(solve(r,mod,k)-solve(l-1,mod,k));
  18. }
  19. }
  20. public static int solve(long num,int mod,int k){
  21. int [][][] dp=new int[19][mod][10]; //---> 10^18 so 19
  22. for (int i=0;i<=9;i++){
  23. dp[1][i%mod][i]=1;
  24. }
  25. for (int i=2;i<=18;i++){
  26. for (int j=0;j<mod;j++){
  27. for (int m=0;m<=9;m++){
  28. int rem=(j-m)%mod;
  29. if(rem<0)rem+=mod;
  30. for (int l=0;l<=9;l++) {
  31. dp[i][j][m]+=dp[i-1][rem][l];
  32. }
  33. }
  34. }
  35. }
  36. int cnt=0;
  37. String s=String.valueOf(num);
  38. for (int i=1;i<s.length();i++){
  39. for (int j=1;j<=9;j++){
  40. cnt+=dp[i][k][j];
  41. }
  42. }
  43. int [] d=new int[s.length()];
  44. for(int i=0;i<s.length();i++){
  45. d[i]=s.charAt(i)-'0';
  46. }
  47. int psum=0;
  48. int len=s.length();
  49. for (int i=0;i<len;i++){
  50. int dig=s.charAt(i)-'0';
  51. int rem=len-i;
  52. int start = (i == 0) ? 1 : 0;
  53. for (int j=start;j<dig;j++){
  54. int n=(k-psum)%mod;
  55. if (n<0)n+=mod;
  56. cnt+=dp[rem][n][j];
  57. }
  58. psum=(psum+dig)%mod;
  59. }
  60. if(psum%mod==k)cnt+=1;
  61. return cnt;
  62. }
  63. }
Success #stdin #stdout 0.27s 62412KB
stdin
1
16
9999999999
88
0
stdout
55