fork download
  1. // ~~ icebear ~~
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7. typedef pair<int, ii> iii;
  8.  
  9. template<class T>
  10. bool minimize(T &a, const T &b) {
  11. if (a > b) return a = b, true;
  12. return false;
  13. }
  14.  
  15. template<class T>
  16. bool maximize(T &a, const T &b) {
  17. if (a < b) return a = b, true;
  18. return false;
  19. }
  20.  
  21. #define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
  22. #define FORR(i,a,b) for(int i=(a); i>=(b); --i)
  23. #define REP(i, n) for(int i=0; i<(n); ++i)
  24. #define RED(i, n) for(int i=(n)-1; i>=0; --i)
  25. #define MASK(i) (1LL << (i))
  26. #define BIT(S, i) (((S) >> (i)) & 1)
  27. #define mp make_pair
  28. #define pb push_back
  29. #define fi first
  30. #define se second
  31. #define all(x) x.begin(), x.end()
  32. #define task "second"
  33.  
  34. const ll MOD = 1e9 + 2709;
  35. const int inf = 1e9 + 27092008;
  36. const ll INF = 1e18 + 27092008;
  37. const int N = 18;
  38. ll L, R;
  39. ll f[N][10][10];
  40. vector<int> digit;
  41.  
  42. ll DP(int pos, int mx1, int mx2, bool smaller) {
  43. if (pos == -1) return mx2 + mx1;
  44. ll ret = f[pos][mx1][mx2];
  45. if (smaller && ~ret) return ret; // đã có kết quả, nhưng phải thỏa < cái số đang xét thì mới return.
  46. ret = 0;
  47. int limit = (smaller ? 9 : digit[pos]);
  48. FOR(i, 0, limit) {
  49. int mx1_ = mx1;
  50. int mx2_ = mx2;
  51. if (i > mx1_) {
  52. mx2_ = mx1_;
  53. mx1_ = i;
  54. } else maximize(mx2_, i);
  55. (ret += DP(pos - 1, mx1_, mx2_, smaller | (i < limit))) %= MOD;
  56. }
  57. if (smaller) f[pos][mx1][mx2] = ret; // nó phải < thì mới cập nhật bảng F
  58. return ret;
  59. }
  60.  
  61. ll g(ll x) {
  62. if (x == 0) return 0;
  63. digit.clear();
  64. while(x) digit.pb((ll)x % 10), x /= 10;
  65. return DP((int)digit.size() - 1, 0, 0, 0);
  66. }
  67.  
  68. void init(void) {
  69. cin >> L >> R;
  70. }
  71.  
  72. void process(void) {
  73. cout << (g(R) - g(L - 1) + MOD) % MOD << ' ';
  74. }
  75.  
  76. int main() {
  77. ios_base::sync_with_stdio(0);
  78. cin.tie(0); cout.tie(0);
  79. if (fopen(task".inp", "r")) {
  80. freopen(task".inp", "r", stdin);
  81. freopen(task".out", "w", stdout);
  82. }
  83. memset(f, -1, sizeof f);
  84. int tc = 1;
  85. cin >> tc;
  86. while(tc--) {
  87. init();
  88. process();
  89. }
  90. return 0;
  91. }
  92.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
0