Дана шеренга из 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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Как сделать такую анимацию пагинации перемещения точек элементов между числами 01, 02 , 03 , 04 ?
В CSS есть интересное преобраазование: transform: translate(-50%, -50%);Позволяет расположить элемент точно по центру экрана, если в результате применения...