当前位置:网站首页>L2-041 插松枝
L2-041 插松枝
2022-08-03 21:50:00 【Cod_ing】
这种题干长要求多的题目虽然难度不大,但真正临场时难免要花很长时间(每次都栽在这种情况)。
建议还是按照它题目要求的来,就这题而言(稍微多嘴一句),它说的是先去看篮子里的再考虑推送器,因此咱们按照先后顺序判断它的要求来写注意下:每次对STL内的元素进行操作时,都要判断容器是不是空
人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的:
每人手边有一只小盒子,初始状态为空。
每人面前有用不完的松枝干和一个推送器,每次推送一片随机型号的松针片。
工人首先捡起一根空的松枝干,从小盒子里摸出最上面的一片松针 —— 如果小盒子是空的,就从推送器上取一片松针。将这片松针插到枝干的最下面。
工人在插后面的松针时,需要保证,每一步插到一根非空松枝干上的松针片,不能比前一步插上的松针片大。如果小盒子中最上面的松针满足要求,就取之插好;否则去推送器上取一片。如果推送器上拿到的仍然不满足要求,就把拿到的这片堆放到小盒子里,继续去推送器上取下一片。注意这里假设小盒子里的松针片是按放入的顺序堆叠起来的,工人每次只能取出最上面(即最后放入)的一片。
当下列三种情况之一发生时,工人会结束手里的松枝制作,开始做下一个:
(1)小盒子已经满了,但推送器上取到的松针仍然不满足要求。此时将手中的松枝放到成品篮里,推送器上取到的松针压回推送器,开始下一根松枝的制作。
(2)小盒子中最上面的松针不满足要求,但推送器上已经没有松针了。此时将手中的松枝放到成品篮里,开始下一根松枝的制作。
(3)手中的松枝干上已经插满了松针,将之放到成品篮里,开始下一根松枝的制作。
现在给定推送器上顺序传过来的 N 片松针的大小,以及小盒子和松枝的容量,请你编写程序自动列出每根成品松枝的信息。
输入格式:
输入在第一行中给出 3 个正整数:N(≤10 ^ ),为推送器上松针片的数量;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
#include<vector>
#include<stack>
#include<iostream>
using namespace std;
const int MAX = 1e5 + 5;
vector<vector<int>> ans;
void check(vector<int> &now, int K) {
//如果长度符合,则制作完成
if (now.size() >= K) {
ans.push_back(now);
now.clear();
}
}
int main() {
int N, M, K,x;
vector<int> vec;
cin >> N >> M >> K;
for (int i = 0; i < N; i++) {
cin >> x;
vec.push_back(x);
}
stack<int> sta;//篮子用堆栈表示
vector<int> now; //表示当前正在制作的松枝
while(!vec.empty()||!sta.empty()) {
//先考虑堆栈顶部的元素
if (!sta.empty() && (now.empty() || now.back() >= sta.top())) {
now.push_back(sta.top());
sta.pop();
check(now, K);
}//第二考虑推送器上的,用vector的首个元素表示
else if (!now.empty() && !vec.empty()&& vec.front() <= now.back()) {
now.push_back(vec.front());
check(now, K);
vec.erase(vec.begin());
}//都不符合?那就放入堆栈
else if (sta.size() < M&& !vec.empty()) {
sta.push(vec.front());
vec.erase(vec.begin());
}
else {
//堆栈都不放不下,只能收尾了
ans.push_back(now);
now.clear();
}
}
if (!now.empty()) //最后一个也该收尾了
ans.push_back(now);
for (auto& x : ans) {
for (int i = 0; i < x.size(); i++) {
cout << x[i];
if (i != x.size() - 1) cout << " ";
}
cout << endl;
}
return 0;
}
边栏推荐
- 解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
- nxp官方uboot移植到野火开发板PRO(无任何代码逻辑的修改)
- 2022年全国职业院校技能大赛网络安全 B模块 任务十windows操作系统渗透测试 国赛原题
- 1 秒完成授权,Authing 全新上线一键登录功能
- gtk实现图片旋转
- shell编程基础
- XSS online shooting range---prompt
- Soft exam system analysts note experience sharing: theory of protracted war
- 【kali-漏洞扫描】(2.1)Nessus解除IP限制、扫描快无结果、插件plugins被删除(中)
- D - Project Planning--二分
猜你喜欢
随机推荐
6. XML
What is the role and difference between buildscript and allprojects?
如何基于WPF写一款数据库文档管理工具(二)
【进阶自动化测试】一文1000教你如何用Postman做接口自动化测试
LitJson报错记录
VIM操作
Transformer怎么入门?如何学习Transformer?
【刷题篇】二叉树的右视图
FVCOM 3D Numerical Simulation of Hydrodynamics, Water Exchange, Dispersion and Transport of Oil Spills丨FVCOM Model Watershed, Numerical Simulation Method of Marine Water Environment
6. XML
C. Keshi Is Throwing a Party- Codeforces Global Round 17
一体化HTAP数据库如此难,为什么他们还要做?
How to deal with commas in the content of the CSV file of the system operation and maintenance series
21天打卡挑战学习MySQL——《MySQL工具的使用》第一周 第二篇
主板设计中:网络变压器与RJ45网口之间应该保持什么样的距离?
跨端开发技术储备记录
今晚直播 | 8.2-8.4 与你聊聊开源与就业那些事!
gtk实现图片旋转
云图说丨初识华为云微服务引擎CSE
C. Divan and bitwise operations








