题目链接:点击打开链接
题目大意:有个容量限制为 m 的栈,分别把1,2,3,...,n入栈,给出一个系列出栈顺序,问这些出栈顺序是否可能。
解题思路:用 vector 存储每次待检测的序列,用 stack 从1-n依次存储,每次存储时,先判断是否超过容量,以及模拟出栈顺序匹配比较。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
int main()
{
int cap,n,k;
while(~scanf("%d%d%d",&cap,&n,&k))
{
while(k--)
{
vector<int> v(n+1);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
stack<int> sk;
int f=1,j=1;
for(int i=1;i<=n;i++)
{
sk.push(i);
if(sk.size()>cap){f=0; break;}
while(!sk.empty() && sk.top()==v[j])
{
sk.pop();
j++;
}
}
if(sk.size()!=0) f=0;
puts(f?"YES":"NO");
}
}
return 0;
}