纯手动模拟…需要耐心…
注意点:栈的操作 pop,top前都要判空
每次序列输入前要把栈清空,否则上一次栈里的内容会影响下一次(调试了半天的bug就在于没有清空栈qaq)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m,n,k;
int seq[1010];
scanf("%d%d%d",&m,&n,&k);
stack<int> s;
for(int i=0;i<k;i++)
{
bool flag=true;
for(int j=1;j<=n;j++)
{
scanf("%d",&seq[j]);
}
int pointStack=1,pointSeq=1;
while(!s.empty()||pointStack<=n)
{
if(s.empty()&&pointStack<=n)
{
s.push(pointStack);
pointStack++;
}
if(s.top()==seq[pointSeq])
{
s.pop();
pointSeq++;
}
else
{
if(s.size()<m&&pointStack<=n)
{
s.push(pointStack);
pointStack++;
}
else
{
flag=false;
break;
}
}
}
// if(s.empty()&&pointSeq==n+1) flag=true;
if(flag) printf("YES\n");
else printf("NO\n");
while(!s.empty()) s.pop();
}
}