fork download
  1. #include<bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define pp push_back
  5. #define endl '\n'
  6. #define all(x) x.begin(),x.end()
  7. #define ld long double
  8. #define PI acos(-1)
  9. #define ones(x) __builtin_popcountll(x)
  10. //#define int ll
  11.  
  12. using namespace std;
  13.  
  14. void Drakon() {
  15. ios_base::sync_with_stdio(false);
  16. cin.tie(nullptr);
  17. cout.tie(nullptr);
  18. #ifdef Clion
  19. freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
  20. #endif
  21. }
  22.  
  23. unsigned long long inf = 1e10;
  24. const double EPS = 1e-6;
  25. const int MOD = 1000000007, N = 200005, LOG = 25;
  26.  
  27. ll mul(const ll &a, const ll &b) {
  28. return (a % MOD + MOD) * (b % MOD + MOD) % MOD;
  29. }
  30.  
  31. ll add(const ll &a, const ll &b) {
  32. return (a + b + 2 * MOD) % MOD;
  33. }
  34.  
  35. ll pw(ll x, ll y) {
  36. ll ret = 1;
  37. while (y > 0) {
  38. if (y % 2 == 0) {
  39. x = mul(x, x);
  40. y = y / 2;
  41. } else {
  42. ret = mul(ret, x);
  43. y = y - 1;
  44. }
  45. }
  46. return ret;
  47. }
  48.  
  49. string a, b;
  50. ll dp[25][2][2][15];
  51.  
  52. ll slv(int i, bool less, bool greater, int prevDigit) {
  53. if(i == b.size()) return 1;
  54. ll &ret = dp[i][less][greater][prevDigit];
  55. if(~ret)
  56. return ret;
  57. int mn = 0, mx = 9;
  58. if(!less) mx = b[i] - '0';
  59. if(!greater) mn = a[i] - '0';
  60. ret = 0;
  61. for (int j = mn; j <= mx; ++j) {
  62. if(prevDigit == 10) {
  63. ret += slv(i + 1, less | (j < (b[i] - '0')), greater | (j > (a[i] - '0')), (j == 0 ? 10 : j));
  64. }
  65. else {
  66. if(abs(j - prevDigit) <= 2)
  67. ret += slv(i + 1, less | (j < (b[i] - '0')), greater | (j > (a[i] - '0')), j);
  68. }
  69. }
  70. return ret;
  71. }
  72.  
  73. void solve() {
  74. ll l, r;
  75. cin >> l >> r;
  76. a = to_string(l);
  77. b = to_string(r);
  78. reverse(all(a));
  79. while (a.size() != b.size()) a += '0';
  80. reverse(all(a));
  81.  
  82. memset(dp, -1, sizeof dp);
  83. cout << slv(0, false, false, 10);
  84. }
  85.  
  86. signed main() {
  87. Drakon();
  88. int t = 1;
  89. //cin >> t;
  90. while (t--) {
  91. solve();
  92. }
  93. }
Success #stdin #stdout 0s 5296KB
stdin
Standard input is empty
stdout
1