目录
题目
题目链接:
1051 Pop Sequencehttps://pintia.cn/problem-sets/994805342720868352/problems/994805427332562944
测试样例
输入样例
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
输出样例
YES
NO
NO
YES
NO
提交结果截图
算法描述
我在notability上画的:
写得比较潦草,见谅!
带详细注释的源代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int m, n, k, num;//m->栈的长度, n->序列长度, k->待检测序列数量
cin>>m>>n>>k;
vector<int>list;//存储出栈顺序
vector<int>stack;//存储进栈
for(int i = 0; i < k; i++)
{
list.clear();
stack.clear();
//bool flag = false;//标志是否合理
int k = 0;
for(int j = 0; j < n; j++)
{
cin>>num;
list.push_back(num);
}
for(int j = 1; j <= n; j++)
{
stack.push_back(j);//进栈
if(stack.size() > m)//栈中元素个数超了
break;
while (stack[stack.size()-1] == list[k])//栈顶元素与第一个出栈元素相等
{
stack.pop_back();//栈顶出栈
k++;//下一个出栈元素
}
}
if(k == n+1)//如果栈中元素全部出栈
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}