L2-041 插松枝

题目 L2-041 插松枝

image-3e29a287

思路分析

代码实现

#include <bits/stdc++.h>

using namespace std;

#define endl '\n'

#define int long long

using ll = long long;

using ull = unsigned long long;

using PII = pair<int, int>;

using Pll = pair<ll, ll>;

int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

const int inf = 0x3f3f3f3f;

queue<int> q;

stack<int> s;

int n, m, k;

signed main() {

    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    cin >> n >> m >> k;

    while (n--) {

        int x;

        cin >> x;

        q.push(x);

    }

    while (q.size() || s.size()) {

        int cnt = 0, last = inf;

        vector<int> curr_branch;

        while (cnt < k) {

            if (s.size() && s.top() <= last) {

                curr_branch.push_back(s.top());

                last = s.top();

                s.pop();

                cnt++;

            } else if (q.size()) {

                int t = q.front();

                if (t <= last) {

                    curr_branch.push_back(t);

                    last = t;

                    q.pop();

                    cnt++;

                } else if (s.size() < m) {

                    s.push(t);

                    q.pop();

                } else {

                    break;  // 小盒子已满,还不能用 → 结束当前枝

                }

            } else {

                break; // 推送器空了

            }

        }

        // 输出一根枝

        for (int i = 0; i < curr_branch.size(); i++) {

            if (i) cout << " ";

            cout << curr_branch[i];

        }

        cout << endl;

    }

    return 0;

}

同类题型

视频讲解


⬅️ L2-040 哲哲打游戏 🏠 00-天梯赛 ➡️ L2-042 老板的作息表