赞
踩
作者 陈越
单位 浙江大学
人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的:
(1)小盒子已经满了,但推送器上取到的松针仍然不满足要求。此时将手中的松枝放到成品篮里,推送器上取到的松针压回推送器,开始下一根松枝的制作。
(2)小盒子中最上面的松针不满足要求,但推送器上已经没有松针了。此时将手中的松枝放到成品篮里,开始下一根松枝的制作。
(3)手中的松枝干上已经插满了松针,将之放到成品篮里,开始下一根松枝的制作。
现在给定推送器上顺序传过来的 N 片松针的大小,以及小盒子和松枝的容量,请你编写程序自动列出每根成品松枝的信息。
输入在第一行中给出 3 个正整数:N(≤103),为推送器上松针片的数量;M(≤20)为小盒子能存放的松针片的最大数量;K(≤5)为一根松枝干上能插的松针片的最大数量。
随后一行给出 N 个不超过 100 的正整数,为推送器上顺序推出的松针片的大小。
每支松枝成品的信息占一行,顺序给出自底向上每片松针的大小。数字间以 1 个空格分隔,行首尾不得有多余空格。
- 8 3 4
- 20 25 15 18 20 18 8 5
-
- 20 15
- 20 18 18 8
- 25 5
-
代码长度限制
16 KB
Java (javac)
时间限制
500 ms
内存限制
64 MB
其他编译器
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- #define endl "\n"
-
- ll n,m,k,c;
- //盒子
- stack<ll>h;
- //传送带,当前的松枝
- queue<ll>q,s;
-
- void solve(){
- cin >> n >> m >> k;
- for(ll i = 0 ; i < n ; i ++)cin >> c,q.push(c);
- while(!q.empty() || !h.empty()){//当前传送带有东西或者盒子里有松叶
- s.push(1007);//放入一个大于max的松叶
- while(s.size() <= k){//当前松枝还能放松叶
- if(!h.empty() && h.top() <= s.back()){//盒子不为空,并且最上面的松叶可以插到松枝上
- s.push(h.top());
- h.pop();
- }else if(!q.empty() && q.front() <= s.back()){//传送带上的松叶可以插到松枝上
- s.push(q.front());
- q.pop();
- }else if(!q.empty() && h.size() < m){//传送带的松叶可以放到盒子里
- h.push(q.front());
- q.pop();
- }else break;//都不行就结束
- }
- s.pop();//弹出塞入的max
- cout << s.front();//输出第一个值让后面格式对齐
- s.pop();
- while(!s.empty()){//依次弹出松枝上的松叶
- cout << " " << s.front();
- s.pop();
- }
- cout << endl;
- }
- return;
- }
-
- int main(){
- ll t=1;//cin >> t;
- while(t--)solve();
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。