Advertisement
martarubtsova

Untitled

Jan 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int n, m, last_i = -1, x, h;
  10.     bool flag = true; //тру, пока не выяснится, что по каким-т причинам ответ: -1
  11.     cin >> n >> m;
  12.     vector <pair <int, int> > a; //<кол-во фоток, номер альбома>
  13.     vector <int> b;//складываю сюда фото из альбома по номерам альбомов
  14.     for (int i = 0; i < m; i++)
  15.     {
  16.         cin >> x;
  17.         a.push_back(make_pair(x, i + 1));
  18.     }
  19.     int j = 0;
  20.     while (j < n && flag)
  21.     {
  22.         sort(a.begin(), a.end());//каждый раз сортирую
  23.         if (j == n - 1) //n - 1 - эт последняя фот-я => по этой ветви определяю ее нахождение
  24.         {
  25.             h = m - 1;
  26.             while (h >= 0)//по всем альбомам прохожу, пока не встречу подходящий
  27.             {
  28.                 if (a[h].first > 0 && a[h].second != last_i && a[h].second != b[0])
  29.                 {
  30.                     b.push_back(a[h].second);
  31.                     last_i = a[h].second;
  32.                     a[h].first--;
  33.                     break;
  34.                 }
  35.                 else
  36.                     if (h == 0)
  37.                         flag = false;
  38.                 h--;
  39.             }
  40.         }
  41.         else
  42.         {
  43.             if (a[m - 1].first > 0 && a[m - 1].second != last_i)
  44.             {
  45.                 b.push_back(a[m - 1].second);
  46.                 last_i = a[m - 1].second;
  47.                 a[m - 1].first--;
  48.             }
  49.             else
  50.                 if (m - 2 >= 0 && a[m - 2].first > 0 && a[m - 2].second != last_i)
  51.                 {
  52.                     a[m - 2].first--;
  53.                     b.push_back(a[m - 2].second);
  54.                     last_i = a[m - 2].second;
  55.                 }
  56.                 else
  57.                 {
  58.                     flag = false;
  59.                     break;
  60.                 }
  61.         }
  62.         j++;
  63.     }
  64.     if (b[n - 1] == b[0])
  65.         flag = false;
  66.     if (flag)
  67.         for (int i = 0; i < int(b.size()); i++)
  68.             cout << b[i] << ' ';
  69.     else
  70.         cout << -1;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement