#include "bits/stdc++.h"
using namespace std;
vector<int> N, M, K;
int n, m, k;
void print(){
for(int i = 0; i < K.size() - 1; i ++)
cout<<K[i]<<" ";
if(K.size())
cout<<K[K.size() - 1]<<endl;
K.clear();
}
void PushM(){
K.push_back(M.back());
M.pop_back();
}
void PushN(){
K.push_back(N.back());
N.pop_back();
}
int main(){
cin>>n>>m>>k;
int x;
while(n --) {
cin>>x;
N.push_back(x);
}
reverse(N.begin(), N.end()); //因为传送带上的松枝片要按顺序插
while(M.size() || N.size()) //只要松枝片没有插完就一直插
if(K.empty()) //只要松枝空了,就任意插,优先插盒子里的
if(M.size()) PushM();
else PushN();//盒子里没有就先插传送带上的
else if(K.size() == k) print(); //松枝只要满了就输出
else if(M.size()) //当盒子里有松枝片就先插盒子里的
if(M.back() <= K.back()) //满足要求才能插
PushM();
else
if(N.size()) //不满足要求看传送带上的,先看有没有东西
if(N.back() <= K.back()) PushN(); //满足要求就插
else
if(M.size() == m) //不满足要求就放盒子里,但是盒子满了就不能放了,并且就要输出了
print();
else //盒子有空放盒子里
M.push_back(N.back()),
N.pop_back();
else print();//当盒子里的东西不符合要求,传送带上没有东西的时候,输出
else //当空盒子的时候
if(N.back() <= K.back()) PushN();//传送带上有符合要求的先放
else
M.push_back(N.back()),
N.pop_back(); //不符合要求进盒子
print(); //如果最后一支松枝上不为空的话也要输出
return 0;
}
L2-1 插松枝
最新推荐文章于 2024-09-13 17:43:09 发布