1051 Pop Sequence (25 分)

对于一个序列,每输入一个数t,如果栈不为空,就判断它与栈顶是否相等,如果等,栈顶出栈,判断下一个数;如果不等,在栈的大小允许范围内,将index入栈,每入栈一次判断一次t与

栈顶是否相等。

如果序列是符合要求的,最后的栈一定是空的,所以只要在处理完序列后判断栈有没有空即可知道序列对不对。

 1 int main() {
 2     int m, n, k, size, index; cin >> m >> n >> k;
 3     for (int i = 0; i < k; ++i) {
 4         size = 0, index = 1;
 5         stack<int> s;
 6         for (int j = 0; j < n; ++j) {
 7             int t; cin >> t;
 8             while (size <= m) {
 9                 if (!s.empty() && t == s.top()) {
10                     size--;
11                     s.pop();
12                     break;
13                 }
14                 else {
15                     s.push(index++);
16                     ++size;
17                 }
18             }
19         }            
20         if (s.empty())  cout << "YES" << endl;
21         else cout << "NO" << endl;
22     }
23     return 0;
24 }
原文地址:https://www.cnblogs.com/2020R/p/14487501.html