L2-032 彩虹瓶 (栈模拟

题目链接

解题思路:

前几天 模拟赛 刚做了个类似的  刚才做这个居然又开始混乱 。。糊里糊涂写出来了

代码如下(数组版):

#include<iostream>
using namespace std;
const int maxn=1e3+10;
int a[maxn];
int b[maxn];
int main()
{
	int n,m,k,i,j,x,y,ans;
	int flag;
	cin>>n>>m>>k;
	while(k--)
	{
		j=0;
		flag=0;
		ans=1;
		for(i=1;i<=n;i++)
		{
			cin>>x;
		    j++;
			a[j]=x;
			while(a[j]==ans)
			{
			  j--;
			  ans++;
		    }
		    //cout<<j<<endl;
			if(j > m)
			  flag=1;
		}
		if(flag||j!=0)
		  cout<<"NO"<<endl;
		else
		  cout<<"YES"<<endl;
	}
	return 0;
}

代码如下(栈版):

#include<iostream>
#include<stack>
using namespace std;
const int maxn=1e3+10;
int a[maxn];
int main()
{
	int n,m,k,i,j,x,y,ans;
	int flag;
	cin>>n>>m>>k;
	while(k--)
	{
		stack<int> s;
		flag=0;
		ans=1;
		for(i=1;i<=n;i++)
		{
			cin>>x;
		    s.push(x);
			while(!s.empty())
			{
				if(s.top()==ans)
				{
					s.pop();
			        ans++;
				} 
				else
				  break;
		    }
			if(s.size() > m)
			  flag=1;
		}
		if(flag||s.size()>0)
		  cout<<"NO"<<endl;
		else
		  cout<<"YES"<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/109785591