PTA 2-9 彩虹瓶 (20 分)(C语言)
2-9 彩虹瓶 (20 分)
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。
假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取下来装填,否则去工厂里再搬一箱过来。
如果工厂里发货的顺序比较好,工人就可以顺利地完成装填。例如要按顺序装填 7 种颜色,工厂按照 7、6、1、3、2、5、4 这个顺序发货,则工人先拿到 7、6 两种不能装填的颜色,将其按照 7 在下、6 在上的顺序堆在货架上;拿到 1 时可以直接装填;拿到 3 时又得临时码放在 6 号颜色箱上;拿到 2 时可以直接装填;随后从货架顶取下 3 进行装填;然后拿到 5,临时码放到 6 上面;最后取了 4 号颜色直接装填;剩下的工作就是顺序从货架上取下 5、6、7 依次装填。
但如果工厂按照 3、1、5、4、2、6、7 这个顺序发货,工人就必须要愤怒地折腾货架了,因为装填完 2 号颜色以后,不把货架上的多个箱子搬下来就拿不到 3 号箱,就不可能顺利完成任务。
另外,货架的容量有限,如果要堆积的货物超过容量,工人也没办法顺利完成任务。例如工厂按照 7、6、5、4、3、2、1 这个顺序发货,如果货架够高,能码放 6 只箱子,那还是可以顺利完工的;但如果货架只能码放 5 只箱子,工人就又要愤怒了……
本题就请你判断一下,工厂的发货顺序能否让工人顺利完成任务。
输入格式:
输入首先在第一行给出 3 个正整数,分别是彩虹瓶的颜色数量 N(1<N≤103)、临时货架的容量 M(<N)、以及需要判断的发货顺序的数量 K。
随后 K 行,每行给出 N 个数字,是 1 到N 的一个排列,对应工厂的发货顺序。
一行中的数字都以空格分隔。
输出格式:
对每个发货顺序,如果工人可以愉快完工,就在一行中输出 YES
;否则输出 NO
。
输入样例:
7 5 3
7 6 1 3 2 5 4
3 1 5 4 2 6 7
7 6 5 4 3 2 1
结尾无空行
输出样例:
YES
NO
NO
结尾无空行
我的代码:
#include <stdio.h>
#include<string.h>
/*
按照一定的顺序
思路:将货物按发货顺序取出,若符合正确顺序,拆箱,否则堆在栈顶,
*/
struct Stack{
int *data;
int top;
};int main(){int N,M,K;//颜色数,货架容量,列举数scanf("%d %d %d",&N,&M,&K);int i=0,j=0;int seq[K][N];for (i=0;i<K;i++){for(j=0;j<N;j++){
scanf("%d",&seq[i][j]);}}for(i=0;i<K;i++)
judge(seq[i],N,M);return 0;
}void judge(int a[],int size,int cap){int i=0;//记录标准输出顺序int standard[size];for(i=0;i<size;i++){standard[i]=i+1;}
//初始化临时栈
struct Stack* stack=(struct Stack*)malloc(sizeof(struct Stack));
stack->top=-1;
stack->data=(int *)malloc(cap*sizeof(int ));
int j=0;
//将货物全部取出,将可以放的放下,不能放的压入栈中
for(i=0;i<size;i++)
{//出货货物符合当前顺序,拆箱
if(a[i]==standard[j]) {//printf("%d=%d,out\n",a[i],standard[j]);j++;continue;}
else {
//若栈中有正确的数,出栈while(stack->top!=-1&&stack->data[stack->top]==standard[j]){//printf("%d=%d,%d出栈\n",stack->data[stack->top],standard[j],stack->data[stack->top]);j++;stack->top--;}}
//入栈//判断是否满栈if(IsFull(stack,cap)) {//printf("栈满 ");printf("NO\n");return 0;}else{//printf("%d入栈\n",a[i]);stack->top++;stack->data[stack->top]=a[i];}}//printf("出栈前standard值为:%d\n",standard[j]);
//将剩下的栈中的元素放下
while(stack->top!=-1){if(stack->data[stack->top]==standard[j]){//printf("%d=%d,%d出栈\n",stack->data[stack->top],standard[j],stack->data[stack->top]);j++;stack->top--;}else{//printf("出栈错误 NO\n");printf("NO\n");return 0;}
}
printf("YES\n");
return 0;
}
//判断满栈
int IsFull(struct Stack *s,int cap){
if(s->top+1==cap){//printf("满栈\n");return 1;
}else {//printf("栈中剩下%d个位置",cap-(s->top+1));return 0;
}
}
PTA 2-9 彩虹瓶 (20 分)(C语言)相关推荐
- 2-9 彩虹瓶 (20 分)
2-9 彩虹瓶 (20 分) rb.JPG 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色 ...
- 2-9 彩虹瓶 (20 分)
2-9 彩虹瓶 (20 分) 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将 ...
- 天梯赛PTA L1-059 敲笨钟 (20 分)C语言解法
微博上有个自称"大笨钟V"的家伙,每天敲钟催促码农们爱惜身体早点睡觉.为了增加敲钟的趣味性,还会糟改几句古诗词.其糟改的方法为:去网上搜寻压"ong"韵的古诗词 ...
- PTA 天梯赛的善良(20分)[C语言]
很多人只能拿18分,会掉两个测试点,因为题没读明白,当最大最小值相同时要一起输出,所以这是一道"循环+多分支"的题,循环很简单,但想拿满分多分支的情况,一定要想清楚. #inclu ...
- 天梯赛 L2-032 彩虹瓶 (25 分)
L2-032 彩虹瓶 (25 分) 思路: 读完题目就知道是用栈处理, 值得注意的是 1 while (s.size() && s.top() == d)中,要先判断栈的大小,再判断栈 ...
- 一起开心2020蓝桥寒假训练(二)7-6 彩虹瓶 (25分)用到栈,队列
一起开心2020蓝桥寒假训练(二)7-6 彩虹瓶 (25分) 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按 ...
- PTA 7-9 叶节点求和 (20 分)
PTA 7-9 叶节点求和 (20 分) 对给定的有N个节点(N>=0)的二叉树,求叶节点元素之和 没有当过父节点的节点都是叶子节点 #include <iostream> #inc ...
- L2-032 彩虹瓶 (25分)(C语言)
L2-032 彩虹瓶 (25分) 彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不 ...
- L1-049 天梯赛座位分配 (20分)(C语言)
L1-049 天梯赛座位分配 (20分)(C语言) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛 ...
最新文章
- SSIS中的记录集目标
- 【数据分析】多场景下的算法构建
- 你认识它们吗?2014十大科技流行词
- easyUI的图标设置
- CentOS7下安装pssh并使用
- opencv yuv保存本地_OpenCV-dlib-python3实现人脸戴墨镜和含Y的抖音效果
- Linux下查看物理CPU、逻辑CPU和CPU核数
- Python学习之路day3-集合
- 树莓派3B 开启串口
- python安装包下载及安装(超详细)
- FPGA入门到精通系列1:数字电路基础知识
- CS 61A Environment Diagrams 学习笔记
- 千万级敏感词过滤设计
- 网络机顶盒固件提取、编辑和打包
- 子域名在线查询网站推荐
- 成长的路上每一步都需要自己去用心体会!
- 一个题目引发的数组和指针复习
- 如何无痕在线去水印,水印云一键去除法
- 【Qt编程】基于QWT的曲线绘制及图例显示操作
- HDMI 数据包简析
热门文章
- 【PHP小皮】下载高版本php8.1.0
- 九城全资子公司NBTC Limited与链游平台DPK正式签署投资协议
- 构建系统安全防线!Genmai安全漏洞检测框架全面解析
- ssd windows未能启动服务器,固态硬盘消失不能启动。试修复。
- 室内定位下的智能养老看护系统追踪报警解决方案--室内定位--新导智能
- ipv6的127位掩码如何表示_电脑网络:IP地址、子网掩码详解-你们好,做个朋友可好...
- 解决微云下载限速问题
- php h5支付没有返回app中,很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法...
- Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)二十二(下单和微信支付)
- 数学口袋精灵感受与BUG