【L2-032 彩虹瓶】天梯赛L2系列详解

天梯赛L2-032 彩虹瓶

题目详情:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:

题目的大概意思:
1、把一堆数顺序排放从1——N,然后再搞乱,让你给他们一个接一个顺序的匹配,
2、匹配的过程如果遇到不匹配的数,把这个数先放到货架上。
3、这个货架:可以存放暂时不匹配的数,但是这些数是以栈的形式存放:先进后出,并且货架是有大小的,如果存放的数超过货架,就是错误的。
4、匹配的时候,遇到不匹配的时候,把数放到货架上,遇到匹配的时候,直接匹配后,然后再去货架上看看,货架上的数,是不是下一个匹配的数。
5、给你一些匹配顺序,让你看看这写匹配的顺序是不是可以

所以我们要怎么做?
是不是有必要存放原来的那一堆数,当然可以用数组存放,但是仔细想想,用数组,数组也是通过下标来进行向后移动的,为什么不直接设置一个变量为1,然后累加呢?再设置一个栈,去当货架。

详细代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
stack<int>s;//货架
int flag = 1;//判断货架大小是否合适
int main()
{
	cin>>n>>m>>k;
	while(k--)
	{
		int need = 1;//需要匹配的数从1开始
		for(int i=0; i<n; i++)
		{
			int x;
			cin>>x;
			if(need == x)//数匹配上了
			{
				need++;//换下一个数匹配
				while(!s.empty())//看看货架上是否有可以匹配的数
				{
					if(s.top() == need)//货架上有匹配的数
					{
						s.pop();
						need++;//换下一个数匹配
					}
					else
					{
						break;//不匹配就跳出循环
					}
				}
			}
			else 
			{
				s.push(x);//存放在货架上
				if(s.size() > m)//如果货架的大小超了
			    {
			    	flag = 0;
				}
			}
		}
		if(need > n && flag == 1)//数匹配完了并且没有超过货架的大小
	        cout<<"YES\n";
	    else 
	        cout<<"NO\n";
	     /*恢复到初始状态*/
	    while(!s.empty())//清空栈
	        s.pop();
	    flag = 1;//恢复标志位
	}
}



知识总结:

思路特别重要。欢迎题友讨论题目,相互学习。

### L2-032 彩虹 测试点 解题思路 对于L2-032彩虹问题,采用深度优先搜索(DFS)算法来解决问题是一个有效的方法[^1]。当遇到错误时,特别是针对特定测试点失败的情况,一个重要调整是在初始化最大深度`maxd`变量时设置其初始值为-1而不是其他数值。这有助于更精确地追踪到达出口的最大深度。 在处理输入数据方面,程序接收N个绝对值不超过100的整数作为子的高度,并通过N−1个基本算术运算符连接这些高度进行计算[^2]。需要注意的是,在解析输入字符串时要考虑到数字和符号之间是以单个空格分隔的事实。 为了验证工人的工作状态并输出相应的结果,“YES”表示能够顺利完成任务而“NO”则相反。此逻辑依赖于具体的业务规则实现,即根据给定条件判断是否满足完成工作的标准[^3]。 ```python def can_worker_finish_happily(tasks, rules): stack = [] for task in tasks: while stack and (len(stack) >= 2) and ((stack[-1], task) in rules): op, b = stack.pop(), stack.pop() result = apply_rule(op, b, task) stack.append(result) else: stack.append(task) return "YES" if all_conditions_met(stack) else "NO" def main(): n = int(input()) heights = list(map(int, input().split())) operators = input().split() # Process the inputs with DFS or other suitable algorithms here if __name__ == "__main__": main() ``` 上述代码片段展示了如何基于栈结构模拟操作过程的一部分伪代码示例。实际应用中还需要补充完整的DFS遍历逻辑以及具体的操作执行函数如`apply_rule()`和`all_conditions_met()`等细节部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值