题目大意:栈的容量为m,n个数一次放入栈中,中途可以弹出,问以下的序列是否可以生成
算法:用栈模拟整个过程,如果栈顶元素正好是目标序列中的那一项,则弹出,否则就继续往栈里面添加元素
代码如下:
今天晚上好累,学了英语六级、数学建模还做了一些(只有一道)天梯赛的题,感觉脑子要爆炸,希望尽快进入状态吧,最后一个月了!
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int tar[1005];
stack<int>S;
int main()
{
int m,n,k;
cin >> m >> n >> k;
while(k--)
{
for(int i = 1;i <= n;i++)
{
cin >> tar[i];
}
int poi=1;
for(int i = 1;i <= n;i++)
{
if(S.size()>=m) break;
S.push(i);
while(S.empty()==0&&S.top()==tar[poi])
{
S.pop();
poi++;
}
}
if(k==0)
{
if(S.empty()) cout << "YES";
else cout << "NO";
break;
}
if(S.empty()) cout << "YES"<<endl;
else cout << "NO"<<endl;
while(!S.empty()) S.pop();
}
return 0 ;
}