简单的模拟题,已知一个输入序列:1,2,3......N,是否能够利用栈的Pop和Push操作得到目标的序列
代码如下:
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<algorithm>
#include<iomanip>
using namespace std;
int main(){
int total;
while (cin >> total){
if (total == 0) break;
while (true){
queue<int> aim;
bool flag = false;
for (int i = 0; i < total; i++){
int t;
cin >> t;
if (t == 0){
flag = true;
break;
}
aim.push(t);
}
if (flag) break;
stack<int> s;
int start = 1;
while (!aim.empty()){
int t = aim.front();
aim.pop();
if (!s.empty()&&s.top() == t){
s.pop();
}
else if(start<t){
while (start <= t){
s.push(start);
start++;
}
if (s.top() == t) s.pop();
}
else if (start == t){
start++;
}
else{
break;
}
}
if (aim.empty()) cout << "Yes" << endl;
else cout << "No" << endl;
}
cout << endl;
}
//system("pause");
return 0;
}