用一个辅助栈模拟入出栈的过程即可。想找规律用数学方法做来着,但是没必要(才不是因为我不会呢!)。
#include<bits/stdc++.h> using namespace std; int a[100010]={0}; int main(){ int n,m,x; cin>>n; for(int i=0;i<n;i++){ cin>>m; vector<int> a,b; stack<int> q; for(int j=0;j<m;j++){ cin>>x; a.push_back(x); } for(int j=0;j<m;j++){ cin>>x; b.push_back(x); } int k=0; for(int j=0;j<m;j++){ q.push(a[j]); while(!q.empty() && q.top()==b[k]){ q.pop(); k++; } } if(q.empty()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }