задача про stack

161
14 мая 2018, 13:00

Дана шеренга из n психов. Каждому психу дан идентификатор от 1 до n
На каждом ходе каждый псих, имеющий идентификатор больше, чем у психа справа (если такой есть) убивает своего соседа справа в шеренге
Вам дано исходное расположение психов в шеренге. Подсчитайте, сколько необходимо ходов до момента времени, после которого никто никого не будет убивать.

входные данные:
10
10 9 7 8 6 5 3 4 2 1
выходные данные:
2

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> q;
    int a, n, b, j = 0, c;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> a;
        q.push(a);
    }
    for(int i = 0; i < q.size(); i++){
        if(q.top() > q.top() + 1){
            j = j + 1;
        }
    }
    cout << j;
}
Answer 1

Если нужно использование именно стека, то удобно добавить второй стек для временного хранения. Ideone:

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack <int> q, p;
    int a, n, killed, cycles, t;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> a;
        q.push(a);
    }
    cycles = 0;
    killed = 1;  
    while (q.size() > 0 && killed > 0){
       killed = 0;
       while (q.size() > 0){
          t = q.top();
          q.pop();
          if (q.size() == 0 || t >= q.top()) //живых на передержку
              p.push(t);
          else {
             killed++;
             cout << t << " ";
          }
       }   
       if (killed)
             cycles++;
       while (p.size() > 0){  //живых обратно в бой
          t = p.top();
          p.pop();
          q.push(t);
       }
    }   
    cout << "\n" << cycles;
}
READ ALSO
Обратная польская запись - C++

Обратная польская запись - C++

Как и куда записать строку, которая будет парситься?

234
Как правильно сделать такой эффект в пагинации?

Как правильно сделать такой эффект в пагинации?

Как сделать такую анимацию пагинации перемещения точек элементов между числами 01, 02 , 03 , 04 ?

276
перестает работать ссылка(css)

перестает работать ссылка(css)

Есть блок, вот его код

220
CSS центрирование transform: translate(-50%, -50%)

CSS центрирование transform: translate(-50%, -50%)

В CSS есть интересное преобраазование: transform: translate(-50%, -50%);Позволяет расположить элемент точно по центру экрана, если в результате применения...

225