Advertisement
GerONSo

H open

Jan 8th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. /*
  2. ┓┏┓┏┓┃
  3. ┛┗┛┗┛┃
  4. ┓┏┓┏┓┃
  5. ┛┗┛┗┛┃
  6. ┓┏┓┏┓┃\○/
  7. ┛┗┛┗┛┃ / /
  8. ┓┏┓┏┓┃ノ
  9. ┛┗┛┗┛┃
  10. ┓┏┓┏┓┃
  11. ┛┗┛┗┛┃
  12. ┓┏┓┏┓┃
  13. ┛┗┛┗┛┃
  14. ┓┏┓┏┓┃
  15. ┛┗┛┗┛┃
  16. ┓┏┓┏┓┃┓
  17. ┛┗┛┗┛┃┃
  18. MIPTCLASSICMIPTCLASSICMIPTCLASSICMIPTCLASSICMIPTCLASSICMIPTCLASSIC
  19. */
  20.  
  21. // #define pragma
  22.  
  23. #ifdef pragma
  24. #pragma GCC optimize("Ofast")
  25. #pragma GCC optimize("no-stack-protector")
  26. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  27. #pragma GCC optimize("unroll-loops")
  28. #pragma GCC diagnostic ignored "-Wunused-result"
  29. #endif // pragma
  30.  
  31. #include<bits/stdc++.h>
  32. #include <ext/pb_ds/assoc_container.hpp>
  33. #include <ext/pb_ds/tree_policy.hpp>
  34.  
  35. #define ll long long
  36. #define all(x) begin(x), end(x)
  37. #define pb push_back
  38. #define x first
  39. #define y second
  40. #define int long long
  41. #define zero(two) memset(two, 0, sizeof(two))
  42.  
  43. using namespace std;
  44. using namespace __gnu_pbds;
  45.  
  46.  
  47. typedef vector<int> vi;
  48. typedef vector<bool> vb;
  49. typedef pair<int, int> pii;
  50. typedef long double ld;
  51. typedef vector<vi> matrix;
  52. template<typename T>
  53. using kawaii_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  54.  
  55. const ld PI = atan2(0, -1);
  56.  
  57. void seriy() {
  58. ios::sync_with_stdio(0);
  59. cin.tie(0);
  60. cout.tie(0);
  61. cout << fixed << setprecision(10);
  62. #if 1
  63. freopen("input", "r", stdin);
  64. freopen("output", "w", stdout);
  65. #endif
  66. }
  67.  
  68. const int MOD = 998244353ll;
  69.  
  70. signed main() {
  71. seriy();
  72. string l, r;
  73. cin >> l >> r;
  74. string ans = "";
  75. int cur = 0;
  76. reverse(all(l));
  77. while(l.size() < r.size()) {
  78. l += '0';
  79. }
  80. reverse(all(l));
  81. while(cur < l.size() && l[cur] == r[cur]) {
  82. ans += l[cur];
  83. cur++;
  84. }
  85. if(cur == l.size()) {
  86. ans = r;
  87. int k = 1;
  88. for(auto i : ans) {
  89. k *= (i - '0');
  90. k %= MOD;
  91. }
  92. return cout << k, 0;
  93. }
  94. string h = r.substr(cur, r.size() - cur);
  95. if(h[0] == '1' && cur == 0) {
  96. int k = 1;
  97. for(int i = 0; i < h.size() - 1; i++) {
  98. k *= 9;
  99. k %= MOD;
  100. // cout << 9;
  101. }
  102. cout << k;
  103. return 0;
  104. }
  105. reverse(all(h));
  106. while(h.size() && h.back() == '1') {
  107. ans += '1';
  108. h.pop_back();
  109. }
  110. reverse(all(h));
  111. string bst = h;
  112. string def = h;
  113. int t = min(16ll, (int)h.size());
  114. int mx = 1;
  115. for(int i = 0; i < t; i++) {
  116. mx *= (h[i] - '0');
  117. }
  118. for(int i = 0; i < t - 1; i++) {
  119. if(h[i] == '1') {
  120. continue;
  121. }
  122. int mul = 1;
  123. for(int j = 0; j < t; j++) {
  124. if(j < i) {
  125. mul *= (h[j] - '0');
  126. }
  127. else if(j > i) {
  128. mul *= 9;
  129. }
  130. else {
  131. mul *= (h[j] - '0' - 1);
  132. }
  133. // mul %= MOD;
  134. }
  135. if(mul > mx) {
  136. mx = mul;
  137. bst = "";
  138. for(int j = 0; j < h.size(); j++) {
  139. if(j < i) {
  140. bst += h[j];
  141. }
  142. else if(j > i) {
  143. bst += '9';
  144. }
  145. else {
  146. bst += (char)(h[j] - 1);
  147. }
  148. }
  149. }
  150. // cerr << mul << '\n';
  151. }
  152. ans += bst;
  153. int k = 1;
  154. for(auto i : ans) {
  155. k *= (i - '0');
  156. // cerr << k << " ";
  157. k %= MOD;
  158. // cerr << k << '\n';
  159. }
  160. cout << k << '\n';
  161. // cout << ans;
  162. return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement