原题目地址请移步此处(习题集已关闭,无法提交):点击此处
题目:
Input:
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
Output:
YES
NO
NO
YES
NO
题目分析:
掌握了栈的原理之后用数组模拟即可;
代码:
#include<stack>
#include<cstdio>
#include<cstring>
using namespace std;
int visited[1005],sequence[1005];
int m,n,k,temp;
int main()
{
scanf("%d%d%d",&m,&n,&k);
while(k--)
{
int flag=1,t=0,counter=0;
stack<int> Emiya;
memset(visited,0,sizeof(visited));
for(int i=0;i<n;i++) scanf("%d",&sequence[i]);
for(int i1=0;i1<n;i1++)
{
if(sequence[i1]<t) flag=0;
else if(sequence[i1]==t) Emiya.pop(),visited[sequence[i1]]=2;
else if(sequence[i1]>t){
for(int i2=counter+1;i2<sequence[i1];i2++)
if(visited[i2]==0) Emiya.push(i2),visited[i2]=1;
else if(visited[i2]==1) flag=0;
visited[sequence[i1]]=2;
counter=sequence[i1];
}
if(Emiya.empty()) t=0;
else t=Emiya.top();
if(Emiya.size()>=m) flag=0;
if(flag==0) break;
}
if(flag==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}