Advertisement
keverman

Untitled

Nov 14th, 2020
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cmath>
  4. #include <vector>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. bool min_bigger_than(std::string& smin, std::string& snum, int beg = 0)
  10. {
  11. if (smin.size() == snum.size())
  12. {
  13. bool strictly_bigger = false;
  14. for (int i = beg; i < smin.size(); i++)
  15. {
  16. if (snum[i] == '6' || snum[i] == '9')
  17. {
  18. if (strictly_bigger)
  19. snum[i] = '6';
  20.  
  21. else
  22. {
  23. bool res = min_bigger_than(smin, snum, i + 1);
  24.  
  25. // Both are either 6 or 9
  26. if (smin[i] == snum[i])
  27. {
  28. if (snum[i] == '6')
  29. {
  30. if (!res)
  31. snum[i] = '9';
  32.  
  33. return true;
  34. }
  35.  
  36. else
  37. return res;
  38. }
  39.  
  40. // smin[i] is > 6, snum[i] is 6
  41. else if (smin[i] > snum[i])
  42. {
  43. snum[i] = '9';
  44. if (smin[i] == snum[i])
  45. return res;
  46. else
  47. return true;
  48. }
  49.  
  50. // smin[i] is < 9, snum[i] is 9
  51. else
  52. {
  53. if (smin[i] < '6' || (smin[i] == '6' && res))
  54. snum[i] = '6';
  55. return true;
  56. }
  57. }
  58. }
  59.  
  60. else
  61. {
  62. if (snum[i] > smin[i])
  63. strictly_bigger = true;
  64.  
  65. if (!strictly_bigger && snum[i] < smin[i])
  66. return false;
  67. }
  68. }
  69.  
  70. return true;
  71. }
  72.  
  73. else if (smin.size() > snum.size())
  74. return false;
  75.  
  76. else
  77. {
  78. for (char& c : snum)
  79. if (c == '9')
  80. c = '6';
  81. return true;
  82. }
  83. }
  84.  
  85.  
  86. int main()
  87. {
  88. int n;
  89. scanf("%d", &n);
  90.  
  91. std::vector<long long> vec(n + 1);
  92. vec[0] = 0;
  93.  
  94. for (int i = 1; i <= n; i++)
  95. scanf("%lld", &vec[i]);
  96.  
  97. for (int i = 1; i <= n; i++)
  98. {
  99. std::string str_prev = std::to_string(vec[i - 1]),
  100. str_cur = std::to_string(vec[i]);
  101.  
  102. if (!min_bigger_than(str_prev, str_cur))
  103. {
  104. printf("impossible\n");
  105. return 0;
  106. }
  107.  
  108. vec[i - 1] = std::stoll(str_prev);
  109. vec[i] = std::stoll(str_cur);
  110. }
  111.  
  112. printf("possible\n");
  113. for (int i = 1; i <= n; i++)
  114. printf("%lld\n", vec[i]);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement