Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование публикую для себя

Андрей Коптелов Коптелов Ученик (114), на голосовании 1 месяц назад
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

string canSortWagons(int n, int k, const vector<int>& wagons) {
vector<stack<int>> stacks(k); // Сортировочные пути
int next_wagon = 1; // Следующий ожидаемый вагон

for (int wagon : wagons) {
if (wagon == next_wagon) {
// Если вагон можно сразу переместить на конечный путь
next_wagon++;
} else {
bool placed = false;

// Перебираем все сортировочные пути
for (int i = 0; i < k; i++) {
if (stacks[i].empty() || stacks[i].top() > wagon) {
stacks[i].push(wagon); // Кладём вагон в подходящий путь
placed = true;
break;
}
}

if (!placed) return "NO"; // Если вагон некуда положить
}

// Перемещаем вагоны с сортировочных путей на конечный путь
for (int i = 0; i < k; i++) {
while (!stacks[i].empty() && stacks[i].top() == next_wagon) {
stacks[i].pop();
next_wagon++;
}
}
}

return "YES"; // Если все вагоны успешно перемещены
}

int main() {
int n, k;
cin >> n >> k;
vector<int> wagons(n);
for (int i = 0; i < n; i++) {
cin >> wagons[i];
}

cout << canSortWagons(n, k, wagons) << endl;
return 0;
}
Голосование за лучший ответ
Похожие вопросы