Advertisement
keverman

Untitled

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