poj1363

来源:互联网 发布:白金数据1080p百度云 编辑:程序博客网 时间:2024/05/16 05:19

题意:给出数据,如果进栈的方式为1……N,判断该数据能否是出栈的顺序。

分析:用栈的知识模拟就可以A掉,用x表示进栈的数,y表示出栈的下一个需要的序号,用数组模拟栈,比较x,y是否相等,若等,则等于进栈再直接出栈;若不等,则x进栈,再比较y和栈顶是否相等,若等,出栈,否则进行下一次循环,追后若y都能出来, 则有该序列,否则输出No。

wa的原因:代码实现的时候少写了一条语句。

AC代码:

#include<iostream>#include<string.h>using namespace std;int main(){int n;int sta[10500];int ou[10500];while(cin>>n&&n){memset(sta,0,sizeof(sta));while(1){for(int i=0;i<n;++i){cin>>ou[i];if(ou[0]==0)break;}if(ou[0]==0){cout<<endl;break;}int x=1,y=0;int k=0;for(int i=0;i<n+n+1;++i){if(y==n)break;if(x==ou[y]){y++;x++;continue;}else if(sta[k-1]==ou[y]){y++;if(k>0)k--;continue;}else {sta[k++]=(x++);}}if(y==n)cout<<"Yes"<<endl;else cout<<"No"<<endl;memset(ou,0,sizeof(ou));}}return 0;}


原创粉丝点击