#include<bits/stdc++.h> using namespace std; #define maxs 1000 typedef struct node{ int c; int top; int D[maxs]; }*Stack; int is(int *p,int m,int n); Stack creat(int m); int push(Stack s,int x); int Top(Stack s); void dis(Stack s); void Pop(Stack s); int main() { int m,n,k; cin>>m>>n>>k; int p[1000]; while(k--) { for(int i=0;i<n;i++) cin>>p[i]; if(is(p,m,n)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } int is(int *p,int m,int n) { Stack s=creat(m); int head=0; for(int i=1;i<=n;i++) { if(!push(s,i)) { dis(s); return 0; } while(Top(s)==p[head]) { head++; Pop(s); } } dis(s); if(head!=n) return 0; return 1; } Stack creat(int m) { Stack s=(Stack)malloc(sizeof(node)); s->c=m; s->top=-1; return s; } int push(Stack s,int x) { if(s->c-s->top<=1) return 0; s->D[++s->top]=x; return 1; } int Top(Stack s) { if(s->top>=0) return s->D[s->top]; else return -1; } void dis(Stack s) { free(s); } void Pop(Stack s) { s->top--; }
满足条件:
1.要判断m 不能超过m长,堆栈只能存这些长度
2.读入的同时要比较