L2-1 插松枝

#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;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小竹子14

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值