SDUT 出栈序列判定 3334
2015-10-13 00:16
232 查看
思路 :让第一个序列进行进占,并且同时和其余序列比较,判断当栈顶与其余序列中的一列当前的数字相同则出栈,否则继续入栈,最后判断栈是否为空,或者j>=n,都是yes.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <set>
#include <stack>
#define inf 0x3f3f3f3f
#define ll __int64
using namespace std;
int n,m,a[10010],b[10010];
int main()
{
int n,m,i,j,k;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",a+i);
scanf("%d",&m);
stack<int>S;
while(m--)
{
for(i=0;i<n;i++)
scanf("%d",b+i);
for(i=0,j=0;i<n&&j<n;)
{
S.push(a[i]);
i++;
k=S.top();
if(k==b[j])
{
while(k==b[j] )
{
j++;
S.pop();
if(!S.empty())
k=S.top();
}
}
}
if( S.empty()||j>=n )
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <set>
#include <stack>
#define inf 0x3f3f3f3f
#define ll __int64
using namespace std;
int n,m,a[10010],b[10010];
int main()
{
int n,m,i,j,k;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",a+i);
scanf("%d",&m);
stack<int>S;
while(m--)
{
for(i=0;i<n;i++)
scanf("%d",b+i);
for(i=0,j=0;i<n&&j<n;)
{
S.push(a[i]);
i++;
k=S.top();
if(k==b[j])
{
while(k==b[j] )
{
j++;
S.pop();
if(!S.empty())
k=S.top();
}
}
}
if( S.empty()||j>=n )
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}
相关文章推荐
- C++基于栈实现铁轨问题
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- Java中堆和栈的区别详解
- java中堆和栈的区别分析
- C/C++函数调用栈的实现方法
- C++中静态存储区与栈以及堆的区别详解
- C++中用栈来判断括号字符串匹配问题的实现方法
- C++中栈结构建立与操作详细解析