题解 | #Rails#
Rails
https://ac.nowcoder.com/acm/problem/14326
此题底层逻辑就是判断出栈序列是否合理,加上一些细节的处理。
using namespace std;
int n;
bool end(){/*end函数用来接收每一个入栈序列的总数,
若是0则直接跳过循环*/
cin >> n ;
if (n) return true;
else return false;
}
int in[1010];
int main(){
while (end()){
int k;
stack<int> rails;
cin >> k;/*k用来接收一个入栈序列块里的结束或者继续信号,
下面while循环末尾也有一个k的cin接收,结合起来作为信号来
结束一个入栈序列块的判断*/
while (k) {
while(!rails.empty()){
rails.pop();
}/*清空rails栈,很关键*/
in[1] = k;/*这里in数组的初始化有一点不一样,因为第一个
元素作为信号k参与结束判断,所以第一个元素初始化比较特殊*/
for (int i = 2 ; i <= n ; i ++ ){
cin >> in[i];
}
int j = 1 ;
for (int i = 1 ; i <= n ; i ++ ){/*这里就是判断入栈后出栈序列的基本模板,需要熟练掌握*/
rails.push(i);
while(!rails.empty() && rails.top() == in[j]){
rails.pop();
j ++ ;
}
}
if (rails.empty())
cout << "Yes" << endl;
else
cout << "No" << endl;
cin >> k;
if (k == 0) cout << endl;
}
}
return 0;
}