Advertisement
FuFsQ

сиплюшплюшная

Jan 18th, 2021
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll ;
  5.  
  6. ll fgen(ll base) {
  7. ll cpy = base;
  8. int length = 0;
  9.  
  10. while (cpy > 0) {
  11. cpy /= 10;
  12. ++length;
  13. }
  14.  
  15. ll base_d = 1;
  16. ll offset = 0;
  17. for (int i = 0; i < length; ++i) {
  18. offset += base_d;
  19. base_d *= 10;
  20. }
  21.  
  22. return offset;
  23. }
  24.  
  25. int main() {
  26. ll a;
  27. cin >> a;
  28.  
  29. int state;
  30. cin >> state;
  31.  
  32. ll brute = a;
  33. ll cpy;
  34. set<int> digits;
  35. if (state == 0) {
  36. int tc = 1;
  37. while (true) {
  38. brute = fgen(brute) * tc;
  39. if (brute < a) {
  40. ++tc;
  41. } else {
  42. cout << brute << "\n";
  43. return 0;
  44. }
  45. }
  46. } else {
  47. string s;
  48. ll cpy = brute;
  49. int dig_len = 0;
  50. while (cpy > 0) {
  51. dig_len += 1;
  52. cpy /= 10;
  53. }
  54. cpy = brute;
  55. s = string(dig_len, '0');
  56. for (int i = 0; i < dig_len; ++i) {
  57. s[dig_len - i - 1] = char(cpy % 10 + int('0'));
  58. digits.insert(cpy % 10);
  59. cpy /= 10;
  60. }
  61.  
  62. if ((digits.size() == 2) ||(digits.size() == 1)) {
  63. cout << s << "\n";
  64. return 0;
  65. }
  66.  
  67. char cchar = s[0];
  68. int cindex = 0;
  69. int cdiff = 0;
  70. int cpos = 0;
  71.  
  72. if (s.size() > 1) {
  73. cchar = s[1];
  74. cindex = 1;
  75.  
  76. if (s[0] != s[1]) {
  77. cdiff = 1;
  78. cpos = 1;
  79. }
  80. }
  81.  
  82. string result(dig_len, ' ');
  83. result[0] = s[0];
  84. if (s.size() == 2) {
  85. cout << s << "\n";
  86. return 0;
  87. }
  88.  
  89. if (s.size() == 1) {
  90. cout << s << "\n";
  91. return 0;
  92. }
  93.  
  94. int diff_pos = 1;
  95. char mx_diff_char = s[1];
  96. int diffs_cnt = 0;
  97.  
  98. bool is_updated_higer = false;
  99. int t_tries = 5000;
  100. int t_tries_cnt = 0;
  101. while (true) {
  102. int curr_diff_index = -1;
  103.  
  104. for (int j = diff_pos; j < result.size(); ++j) {
  105. result[j] = mx_diff_char;
  106.  
  107. if (s[j] != result[j]) {
  108. if ((s[j] > mx_diff_char) && diffs_cnt < 1) {
  109. ++diffs_cnt;
  110. // cout << "NEW MAX = " << mx_diff_char << " AT " << j << "\n";
  111. mx_diff_char = char(int(mx_diff_char) + 1);
  112. j = diff_pos - 1;
  113. }
  114. t_tries_cnt++;
  115. if (t_tries_cnt >= t_tries) {
  116. break;
  117. }
  118. }
  119. t_tries_cnt++;
  120. if (t_tries_cnt >= t_tries) {
  121. break;
  122. }
  123. }
  124.  
  125. cout << result << "\n";
  126. break;
  127. int a;
  128. // cin >> a;
  129. }
  130. }
  131.  
  132. return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement