fork download
  1. // ROOT : DRAGON3012009 : WA in Real Life
  2. #include <bits/stdc++.h>
  3. #define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
  4. #define FORD(i,r,l) for(int i = r ; i >= l ; i --)
  5. #define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
  6. #define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
  7. #define ll long long
  8. #define el "\n"
  9. #define fi first
  10. #define se second
  11. #define _ROOT_ int main()
  12. #define M 1000000007
  13. #define MAXN 1000001
  14. #define INF (1ll<<30)
  15. #define NAME "file"
  16. using namespace std;
  17.  
  18. ll n, m, q ;
  19. ll dp[20][2][2][ (1 << 10) + 1 ][11] ;
  20. string L, R ;
  21.  
  22. ll add(ll a, ll b ) {
  23. return a + b >= M ? a + b - M : a + b ;
  24. }
  25. ll sub(ll a, ll b ) {
  26. return a - b < 0 ? a - b + M : a - b ;
  27. }
  28.  
  29. ll DP(ll pos, ll lower, ll start, ll mask, ll sum, ll so_phan_biet, string &x ) {
  30. if(pos >= x.size() ) {
  31. return start && __builtin_popcount(mask ) == so_phan_biet && (sum % so_phan_biet == 0 ) ;
  32. }
  33. ll &cur = dp[pos][lower][start][mask][sum] ;
  34. if(cur != - 1 ) return cur ;
  35. cur = 0 ;
  36. ll limit = lower ? x[pos] - '0' : 9 ;
  37. FOR(i, 0, limit ) {
  38. ll nxt_start = start || i != 0 ;
  39. ll nxt_sum = sum ;
  40. ll nxt_mask = mask ;
  41. if(nxt_start ) {
  42. nxt_mask |= (1 << i ) ;
  43. nxt_sum = ((nxt_sum) * 10 + i ) % so_phan_biet ;
  44. }
  45. cur += DP(pos + 1, lower && i == limit, nxt_start, nxt_mask, nxt_sum, so_phan_biet, x ) ;
  46. }
  47. return cur ;
  48. }
  49.  
  50. void init() {
  51. ll x;
  52. cin >> x >> R ;
  53. x -- ;
  54. L = to_string(x) ;
  55. L = " " + L ;
  56. R = " " + R ;
  57. }
  58.  
  59. void solve() {
  60. ll ans = 0 ;
  61. FOR(gg , 1, 10 ) {
  62. memset(dp, -1, sizeof dp ) ;
  63. ll temp = DP(1, 1, 0, 0, 0, gg , R ) ;
  64. memset(dp, -1, sizeof dp ) ;
  65. temp = sub(temp,DP(1, 1, 0, 0, 0, gg , L ) ) ;
  66. ans = add(ans, temp ) ;
  67. }
  68. cout << ans << el ;
  69. }
  70.  
  71. _ROOT_ {
  72. // freopen(NAME".inp" , "r" , stdin);
  73. // freopen(NAME".out" , "w", stdout) ;
  74. ios_base::sync_with_stdio(0);
  75. cin.tie(0);
  76. cout.tie(0);
  77. int t = 1; // cin >> t ;
  78. while(t--) {
  79. init();
  80. solve();
  81. }
  82. return (0&0);
  83. }
  84.  
Success #stdin #stdout 0.09s 10624KB
stdin
Standard input is empty
stdout
-3124068125037