不多说,刘汝佳的《算法入门经典》上的例题,堆栈模拟。
#include <cstdio>
#include <stack>
#include <queue>
using namespace std;
#define MAX 1050
int main(void)
{
int N , M , count;
int data[MAX] ;
int i ;
bool flag = true ;
queue<int>Q ;
//freopen("input.txt" , "r" , stdin);
scanf("%d %d %d" , &M , &N , &count);
for( i = 0 ; i< N ; i++)
{
Q.push(i+1);
}
while(count--)
{
int temp[MAX] ;
int visited[MAX]= {0};
int j ;
stack<int>S ;
queue<int>qT ;
qT = Q ;
for( j = 0 ; j < N ; j++)
{
scanf("%d" , &temp[j]);
}
j = 0 ;
flag = true ;
//ÅжÏÊDz»ÊÇÄÜͨ¹ý½øÕ»³öջʵÏÖ
while(j<N)
{
while(S.empty() || temp[j] != S.top() )
{
if( qT.empty() || S.size() == M)
{
flag = false ;
break;
}
S.push(qT.front());
qT.pop();
}
if(!flag)break;
//ÕÒµ½ÁË£¬µ¯³ö
S.pop();
j++ ;
}
if(flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}