Дана шеренга из 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;
}
Если нужно использование именно стека, то удобно добавить второй стек для временного хранения. 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;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей