Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int main()
- {
- int n, m, last_i = -1, x, h;
- bool flag = true; //тру, пока не выяснится, что по каким-т причинам ответ: -1
- cin >> n >> m;
- vector <pair <int, int> > a; //<кол-во фоток, номер альбома>
- vector <int> b;//складываю сюда фото из альбома по номерам альбомов
- for (int i = 0; i < m; i++)
- {
- cin >> x;
- a.push_back(make_pair(x, i + 1));
- }
- int j = 0;
- while (j < n && flag)
- {
- sort(a.begin(), a.end());//каждый раз сортирую
- if (j == n - 1) //n - 1 - эт последняя фот-я => по этой ветви определяю ее нахождение
- {
- h = m - 1;
- while (h >= 0)//по всем альбомам прохожу, пока не встречу подходящий
- {
- if (a[h].first > 0 && a[h].second != last_i && a[h].second != b[0])
- {
- b.push_back(a[h].second);
- last_i = a[h].second;
- a[h].first--;
- break;
- }
- else
- if (h == 0)
- flag = false;
- h--;
- }
- }
- else
- {
- if (a[m - 1].first > 0 && a[m - 1].second != last_i)
- {
- b.push_back(a[m - 1].second);
- last_i = a[m - 1].second;
- a[m - 1].first--;
- }
- else
- if (m - 2 >= 0 && a[m - 2].first > 0 && a[m - 2].second != last_i)
- {
- a[m - 2].first--;
- b.push_back(a[m - 2].second);
- last_i = a[m - 2].second;
- }
- else
- {
- flag = false;
- break;
- }
- }
- j++;
- }
- if (b[n - 1] == b[0])
- flag = false;
- if (flag)
- for (int i = 0; i < int(b.size()); i++)
- cout << b[i] << ' ';
- else
- cout << -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement