Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // RE&TL http://contest.uni-smr.ac.ru/ru/problemset/6131/
- #include <iostream>
- #include <vector>
- void search(size_t cur_i, uint32_t cur_max, std::vector<size_t> &cur_map,
- size_t &n, std::vector<uint32_t> &f, std::vector<size_t> &res, uint32_t &min) {
- if (cur_i == n) {
- if (cur_max < min) {
- min = cur_max;
- res = cur_map;
- }
- } else {
- if (cur_i < n - 1) {
- cur_map.push_back(2);
- cur_map.push_back(2);
- search(cur_i + 2, std::max(cur_max, 2 * (((f[cur_i] + 1) / 2) + (f[cur_i + 1] + 1) / 2)),
- cur_map, n, f, res, min);
- cur_map.pop_back();
- cur_map.pop_back();
- }
- cur_map.push_back(1);
- search(cur_i + 1, std::max(cur_max, 2 * f[cur_i]), cur_map, n, f, res, min);
- cur_map.pop_back();
- }
- }
- int main() {
- size_t n;
- std::cin >> n;
- std::vector<uint32_t> f(n);
- for (size_t i = 0; i < n; i++) {
- std::cin >> f[i];
- }
- uint32_t max = UINT32_MAX;
- std::vector<size_t> res;
- std::vector<size_t> cur_map;
- search(0, 0, cur_map, n, f, res, max);
- std::cout << max << '\n';
- for (auto elem : res) {
- std::cout << elem << ' ';
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment