对于一个序列,每输入一个数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 }