#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int n,m,k,x;
vector<int> box;
vector<int> goods;
queue<int> machine;
void print(){
for(int i=0;i<goods.size();i++){
if(i!=goods.size()-1) cout<<goods[i]<<' ';
else cout<<goods[i]<<'\n';
}
goods.clear();
}
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++) {
cin>>x;
machine.push(x);
}
while(!machine.empty()||!box.empty()){
//盒子不空,去盒子里面拿,拿到盒子空或者松枝装满
while(!box.empty() && (goods.empty() || box.back()<=goods.back())){
goods.push_back(box.back());
box.pop_back();
if(goods.size() == k){
print();
break;
}
}
if(machine.empty()) print(); //推送器空,盒子不空,更换松枝
if(goods.empty() && !box.empty()) continue; //盒子不空,更换松枝,从盒子里拿
//盒子空,推送器不空,从推送器上拿,拿到松枝装满,或者盒子装满松枝还没装满,或者推送器空
while(!machine.empty()){
if(goods.size() == k) break;
if(box.size() == m && machine.front() > goods.back()) {
print();
break;
}
if(goods.empty() || goods.back() >= machine.front()) goods.push_back(machine.front());
else box.push_back(machine.front());
machine.pop();
}
if(goods.size() == k) print(); //如果装满则输出
}
if(!goods.empty()) print(); //松枝片用完,无法继续装,输出最后一个
return 0;
}
L2-041 插松枝
于 2023-02-11 14:37:32 首次发布