AcWing 1535. 弹出序列
原题链接
中等
作者:
leo123456
,
2020-08-30 10:37:03
,
所有人可见
,
阅读 460
//模拟找过程
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int main()
{
int m, n, k;
cin >> m >> n >> k;
for (int i = 0; i < k; i++) {
vector<int> v(n);
bool flag = true;
for (int j = 0; j < n; j++) {
cin >> v[j];
}
stack<int> s;
int cur = 0;
for (int j = 1; j <= n; j++) {
s.push(j);
if (s.size() > m) {
flag = false;
break;
}
while(!s.empty() && s.top() == v[cur]) {
s.pop();
cur++;
}
}
if (!s.empty()) flag = false;
printf("%s\n", flag ? "YES" : "NO");
}
return 0;
}
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
const int N=1010;
int m,n,k;
int a[N];
bool check()
{
stack<int> stk;
for(int i=1,j=0;i<=n;i++)
{
stk.push(i);
if(stk.size()>m) return false;
while(stk.size()&&stk.top()==a[j])
{
stk.pop();
j++;
}
}
return stk.empty();
}
int main()
{
scanf("%d%d%d",&m,&n,&k);
while(k--)
{
for(int i=0;i<n;i++) scanf("%d",&a[i]);
if(check()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}