L2-041 插松枝
题目复杂但是理清关系比较好写
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
const int MOD=1000;
int main()
{
int i,n,m,k,num,num1;
queue<int>q;//流水线
stack<int>s;//盒子
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++)
{
int a;
scanf("%d",&a);
q.push(a);
}
num=MOD;
num1=0;
while(s.size()||q.size())
{
if(s.size()&&s.top()<=num)//盒子里可以插入
{
if(num==MOD) printf("%d",s.top());
else printf(" %d",s.top());
num=s.top();
s.pop();
num1++;
}
else if(q.size()&&q.front()<=num)//流水线可以插入
{
if(num==MOD) printf("%d",q.front());
else printf(" %d",q.front());
num=q.front();
q.pop();
num1++;
}
else if(q.size()&&s.size()<m)//流水线插入盒子里
{
s.push(q.front());
q.pop();
}
if(num1==k||(s.size()==m&&q.front()>num&&s.top()>num))//换新的树
{
printf("\n");
num=MOD;
num1=0;
}
else if(s.size()&&q.size()<=0&&s.top()>num)
{
printf("\n");
num=MOD;
num1=0;
}
}
return 0;
}