一起开心2020蓝桥寒假训练(二)7-6 彩虹瓶 (25分)

彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。

假设彩虹瓶里要按顺序装 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≤1000)、临时货架的容量 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
解题思路:
思路是蛮清晰的,从输入格式前的几大段文字中可以得出。题目告诉我们,我们解决问题时的步骤是:1.架子是空的时候,先看看运来的是不是我们需要的。若是,那很好;若不是,就放到架子去。(这时不用检查货架的容量和货架上放了多少,因为货架的容量至少是1)。2.架子不空的时候,先看看架子最上面的是不是我们此时需要的。若是,nice。若不是,去运货。然后,同架子空时的做法(先看看运来的是不是我们需要的。若是,那很好;若不是,就放到架子去。)。
架子------->栈,发货顺序------->队列
先处理队列。队列处理完后,检查栈空否。如果是空的,说明能成功完成任务。否则,处理栈的元素(while循环)。每次检查栈顶元素是不是我们需要的,如果不是,就返回失败。反之,循环顺利结束了,说明能成功完成任务。
我遇到的问题:
没有一遍过,第一次19分(测试点0、3、5),第二次5分(测试点2、4、5)。
我是错在解题思路里说的第二点要去运货之后的顺序
错误示例1:

             /*先入栈,会错的!因为,当刚运来的是此时需要的,可是你把它入栈了,若不巧的是,架子爆棚了,就出错了*/s.push(a[head++]);size++;if(size>M) return -1; //失败 else if(s.top() == t){t++;s.pop() ;size--;

错误示例2:

/*我把错误的解决顺序改正过来了,但是,还是不对!我把出错的测试用例写下来,想
分析一下。不过,我一写完就知道我那错了。原来,这回是忘记判断架子有没有爆棚了*/if(a[head]==t){//再看队首元素 head++;t++;}else{s.push(a[head++]);size++; }

正确示例:

             if(a[head]==t){//再看队首元素 head++;t++;}else{s.push(a[head++]);size++; if(size>M) return -1;//比错误示例2多了这一句}
/*20200124*/
/*彩虹瓶*/
#include<iostream>
#include<stack>
using namespace std;
int a[1005];
void read(int N){for(int i=0;i<N;i++)scanf("%d",&a[i]);
}
int judge(int N,int M){int head = 0;//队首 int size = 0;//指明栈的容量 int t = 1;//装填顺序1~N stack<int> s;//定义栈/*对队列进行处理*/ while(head<N){/*栈空*/ if(size==0){ //队首元素和t比较 if(a[head]==t){t++;head++;}else{s.push(a[head++]);size++; }}/*栈不空*/else{if(s.top() == t){//先看栈顶元素 t++;s.pop() ;size--;}else{if(a[head]==t){//再看队首元素 head++;t++;}else{s.push(a[head++]);size++; if(size>M) return -1;}/*s.push(a[head++]);size++;if(size>M) return -1; //失败 else if(s.top() == t){t++;s.pop() ;size--;}*/}} }/*栈不空时,观察栈顶元素的值*/ while(size!=0){if(s.top() == t){t++;s.pop() ;size--;}else return -1;//失败 } return 1;
}
int main(){int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i=0;i<k;i++){read(n);int f = judge(n,m);if(f==1) printf("YES\n");else printf("NO\n");}return 0;
}

一起开心2020蓝桥寒假训练(二)7-6 彩虹瓶 (25分)用到栈,队列相关推荐

  1. 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历

    problem L2-004 这是二叉搜索树吗? (25分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大 ...

  2. 蓝桥寒假训练1-2013年第四届蓝桥杯省赛

    1.高斯日记 大数学家高斯有个好习惯:无论如何都要记日记.他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几 ...

  3. 浙江大学软件学院2020年保研真题Distance of Triples (25 分)

    时间限制:300 ms 内存限制:64 MB The distance of triples (三元组) (a,b,c) is defined as D(a,b,c)=∣a−b∣+∣b−c∣+∣c−a ...

  4. 2020查找和排序实验题目——1 奥运排行榜 (25分)

    每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的奖牌总数第一,于是美国媒体就公布 ...

  5. NEFU 大一寒假训练十二(set)2020.02.18

    Summary 可能是昨天的题少了一些,今天的题多了一堆,还疯狂TLE /(ㄒoㄒ)\~~ Information No. Title AC/Submit A 明明的随机数-set 60/101 B ...

  6. 寒假训练十(map,pair,string)2020.02.17(4题)

    寒假训练十(map) id:535 Problem:A 保龄球-map Description DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷.因为他保龄球已经打了几十年了,所以技术上不成问题 ...

  7. [XUPT]2020寒假训练---比赛专题

    比赛链接:https://vjudge.net/contest/357216 说明: 比赛难度正好符合寒假训练的同学.(有一两道可能一些同学做过,我们出题没考虑到sorry) 下面对题目进行解答一下. ...

  8. 寒假训练八(优先队列)2020.02.14(7题)

    寒假训练八(优先队列)id:530 Problem:A 买饭-优先队列 Description 林大食堂非常拥挤,得排队买饭,陈老师也是一样的! 有n个人在一个卖饭窗口前排队买饭,假如每个人买饭的时间 ...

  9. 牛客网平台常州大学新生寒假训练会试

    A-添加逗号 链接:https://www.nowcoder.net/acm/contest/78/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...

最新文章

  1. oracle如何创建一个定时任务,怎么创建定时任务
  2. 电脑连接电视方法详解_HDMI高清线如何连接电脑与电视,简单安装步骤,真是太有用了...
  3. # 秒转换成分钟_10分钟时间,我用Excel完成了别人一天的数据分析工作
  4. 积木赛尔号机器人_【金福利】8月2日赛尔号大电影7:疯狂机器城会员充值动电影票!...
  5. 实现省市二级联动效果
  6. 编写高质量可维护的代码:优雅命名
  7. 太原冶金技师学院计算机系,山西冶金技师学院2021年招生简章
  8. C/C++定时器制作
  9. 推荐系统遇上深度学习(十七)--探秘阿里之MLR算法浅析及实现
  10. 华为无盘服务器,无盘服务器操作系统
  11. Python与C++动态链接库交互 win10平台
  12. 如何成为Linux平台C语言程序员(转)
  13. html中文字空心如何设置,css 中字体文本小诀窍
  14. messagehub讲解,如何获取MessageHub的其余管理API的API密钥?
  15. wifi×××破解的密码查看方式
  16. python 遗传算法_Python实现遗传算法的代码
  17. csr驱动程序linux版,CSR8510蓝牙驱动下载
  18. 如何在github上创建自己的个人网站
  19. (附源码)ssm智慧社区管理系统 毕业设计 101635
  20. 局域网聊天软件源代码(包括语音聊天)

热门文章

  1. hyper-v自带坑
  2. 自然语言处理入门(一)
  3. 《SEO的艺术(原书第2版)》——2.6 垂直搜索引擎
  4. javaweb学习笔记(六)
  5. 大学生计算机编程总结,计算机编程实习小结
  6. 夏目友人帐之撸猫动作倒放
  7. i58400升级可以换什么cpu_宝贝标题关键词顺序可以换吗?关键词顺序对标题有什么影响?...
  8. 除了 Websocket ,服务端还有什么办法能向浏览器主动推送信息?
  9. vue:将Element UI的时间选择器(DatePicker)的Sat Jan 01 2022 00:00:00 GMT+0800 (中国标准时间)转化为XXXX-XX-XX的格式
  10. Rational Rose7.0的安装(含图详解)