题目链接
解题思路:
前几天 模拟赛 刚做了个类似的 刚才做这个居然又开始混乱 。。糊里糊涂写出来了
代码如下(数组版):
#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;
}