Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <cmath>
- #include <vector>
- #include <algorithm>
- using namespace std;
- bool min_bigger_than(std::string& smin, std::string& snum, int beg = 0)
- {
- if (smin.size() == snum.size())
- {
- bool strictly_bigger = false;
- for (int i = beg; i < smin.size(); i++)
- {
- if (snum[i] == '6' || snum[i] == '9')
- {
- if (strictly_bigger)
- snum[i] = '6';
- else
- {
- bool res = min_bigger_than(smin, snum, i + 1);
- // Both are either 6 or 9
- if (smin[i] == snum[i])
- {
- if (snum[i] == '6')
- {
- if (!res)
- snum[i] = '9';
- return true;
- }
- else
- return res;
- }
- // smin[i] is > 6, snum[i] is 6
- else if (smin[i] > snum[i])
- {
- snum[i] = '9';
- if (smin[i] == snum[i])
- return res;
- else
- return true;
- }
- // smin[i] is < 9, snum[i] is 9
- else
- {
- if (smin[i] < '6' || (smin[i] == '6' && res))
- snum[i] = '6';
- return true;
- }
- }
- }
- else
- {
- if (snum[i] > smin[i])
- strictly_bigger = true;
- if (!strictly_bigger && snum[i] < smin[i])
- return false;
- }
- }
- return true;
- }
- else if (smin.size() > snum.size())
- return false;
- else
- {
- for (char& c : snum)
- if (c == '9')
- c = '6';
- return true;
- }
- }
- int main()
- {
- int n;
- scanf("%d", &n);
- std::vector<long long> vec(n + 1);
- vec[0] = 0;
- for (int i = 1; i <= n; i++)
- scanf("%lld", &vec[i]);
- for (int i = 1; i <= n; i++)
- {
- std::string str_prev = std::to_string(vec[i - 1]),
- str_cur = std::to_string(vec[i]);
- if (!min_bigger_than(str_prev, str_cur))
- {
- printf("impossible\n");
- return 0;
- }
- vec[i - 1] = std::stoll(str_prev);
- vec[i] = std::stoll(str_cur);
- }
- printf("possible\n");
- for (int i = 1; i <= n; i++)
- printf("%lld\n", vec[i]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement