插松枝

· · 个人记录

插松枝

/*
1.松枝满了
    下一枝
2.松枝没满
    1.小盒子不空且满足要求
        插上
    2.推送器不空
        1.满足要求
            插上
        2.不满足
            1.盒子不满
                丢入盒子
            2.盒子满了
                下一枝
    1.如果插过了
        cnt++记录(帮助判断松枝有没有满) 
*/
#include <bits/stdc++.h>
using namespace std;
int n,m,k;
stack<int> e;
queue<int> q;
int main()
{
//  ios::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m>>k;
    while(n--)
    {
        int x;
        cin>>x;
        q.push(x);
    }
    while(!q.empty()||!e.empty())
    {
        int cnt=0,st=1e9*2;
        while(1)
        {
            if(cnt>=k)
            {
                break;
            }
            int flag=0;
            if(!e.empty()&&e.top()<=st)
            {
                cout<<e.top()<<' ';
                st=e.top();
                e.pop();
                flag=1;
            }
            else if(!q.empty())
            {
                while(!q.empty())
                {
                    if(q.front()<=st)
                    {
                        cout<<q.front()<<' ';
                        st=q.front();
                        q.pop();
                        flag=1;
                        break;
                    }
                    if(e.size()>=m)
                    {
                        break;
                    }
                    e.push(q.front());
                    q.pop();
                }
            }
            if(flag)
            {
                cnt++;
            }
            else break;
        }
        cout<<'\n';
    }
    return 0;
}