YTU 3002: 出栈顺序(栈和队列)
3002: 出栈顺序(栈和队列)
时间限制: 1 Sec 内存限制: 128 MB提交: 80 解决: 20
题目描述
给出一个入栈序列,和一个出栈序列,判断该出栈序列是否正确。
输入
输入包含三行,第一行为序列的长度N,第二行为N个数表示入栈顺序,第三行同样为N个数,表示出栈顺序。我们保证这N个数字不相同。
输出
如果该出栈序列正确,则输出“Yes”,否则输出“No”。
样例输入
5
1 2 3 4 5
5 4 3 2 1
样例输出
Yes
提示
1、入栈过程中可以出栈
2、请使用C++编译并提交
#include <iostream> #include <algorithm> using namespace std; int n; typedef struct { int data; int w; } ab; ab a[105]; int findd(int t) { for(int i=0; i<n; i++) if(a[i].data==t)return a[i].w; return 0; } bool panduan(int b[105],int l,int t) { int min=0xffff; for(int i=l+1; i<n; i++) { int k=findd(b[i]); if(k<t)min=min>k?k:min; if(k<t&&k>min)return 1; } return 0; } int main() { cin>>n; int b[105],i; for(int i=0; i<n; i++) { cin>>a[i].data; a[i].w=i; } for(i=0; i<n; i++) cin>>b[i]; for(i=0; i<n; i++) { int t=findd(b[i]); if(panduan(b,i,t))break; } if(i!=n)cout<<"No"<<endl; else cout<<"Yes"<<endl; return 0; }
------------------- 这是千千的个人网站哦! https://www.dreamwings.cn -------------------