1 条题解

  • 0
    @ 2025-1-15 9:47:42

    直接模拟题目中说的pushedpoped两个序列。其实就是验证一个序列的出栈和入栈序列是否合法。直接模拟就行了 不过要注意是多测,栈要清空,不然会WA

    
    #include <iostream>
    #include <stack>
    using namespace std;
    #define int long long
    const int N = 1e5+5;
    int q, n, a, b[N], c[N];
    stack<int> s;
    
    signed main() {
    	cin >> q;
    	while (q--) {
    		cin >> n;
    		int ans=1;
    		for (int j = 1; j <= n; j++) {
    			cin >> b[j];
    		}
    		for (int j2 = 1; j2 <= n; j2++) {
    			cin >> c[j2];
    		}
    		for (int j3 = 1; j3 <= n; j3++) {
    			s.push(b[j3]);
    			while (s.top() == c[ans]) {//验证
    				s.pop();
    				ans++;
    				if (s.empty() == 1) { //防RE
    					break;
    				}
    			}
    		}
    		if (s.empty()) {//判断输出就行
    			cout << "Yes\n";
    		} else {
    			cout << "No\n";
    		}
    		while (!s.empty()) {
    			s.pop();	
    		}
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    8414
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    35
    已通过
    10
    上传者