HDU1022 堆栈模拟

来源:互联网 发布:python 打印对象 编辑:程序博客网 时间:2024/06/04 00:58

 传送门:::   http://acm.hdu.edu.cn/showproblem.php?pid=1022

简单的模拟....+stl 水过

不过方法很挫啊.

#include <iostream>#include <stack>#include <algorithm>#include <string>using namespace std;int main(){char str1[15],str2[15];int n,i,k;while(~scanf("%d %s%s",&n,str1,str2)){stack<char> s;i=k=0;bool flag=false;while(true){if(s.empty()&&k!=n){s.push(str1[i]);}else if(str2[k]!=s.top()){i++;s.push(str1[i]);}else if(str2[k]==s.top()){k++;s.pop();if(s.empty())i++;}if(i==n&&k!=n){flag=true;break;}if(s.empty()&&k==n)break;}if(flag)cout<<"No."<<endl<<"FINISH"<<endl;else{cout<<"Yes."<<endl;i=k=0;while(true){if(s.empty()&&k!=(strlen(str2))){s.push(str1[i]);cout<<"in"<<endl;}else if(str2[k]!=s.top()){i++;s.push(str1[i]);cout<<"in"<<endl;}else if(str2[k]==s.top()){k++;s.pop();cout<<"out"<<endl;if(s.empty())i++;}if(s.empty()&&k==strlen(str2))break;}cout<<"FINISH"<<endl;}}return 0;}

不甘心啊,又写了一个优化版的 0MS过(上面是15MS过)

#include <iostream>#include <stack>#include <algorithm>#include <string>using namespace std;int main(){char str1[15],str2[15];int ans[15];int n,i,k,h;while(~scanf("%d %s%s",&n,str1,str2)){stack<char> s;i=k=h=0;bool flag=false;for(i=0;i<15;i++)ans[i]=0;i=0;while(true){if(s.empty()&&k!=n){s.push(str1[i]);ans[h]=1;h++;}else if(str2[k]!=s.top()){i++;s.push(str1[i]);ans[h]=1;h++;}else if(str2[k]==s.top()){k++;s.pop();h++;if(s.empty())i++;}if(i==n&&k!=n){flag=true;break;}if(s.empty()&&k==n)break;}if(flag)cout<<"No."<<endl<<"FINISH"<<endl;else{cout<<"Yes."<<endl;i=0;for(i=0;i<h;i++){if(!ans[i])cout<<"out"<<endl;else cout<<"in"<<endl;}cout<<"FINISH"<<endl;}}return 0;}



原创粉丝点击