假设一个特殊堆栈:两段都可以放入数据,但只有一段能移除数据,请问如何辨别给定数据顺序能否由该堆栈实现?
#include <iostream>
#include <cstring>
#include <stack>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(a, b, c) for (a = b; a <= c; a++)
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
const int N = 15;
int n,m;
int a[N],b[N];
bool dfs(int x,deque<int> q,bool st,int idx){
if (x > n) return 0;
if (st) q.push_front(a[x]);
else q.push_back(a[x]);
while (q.size() && q.back() == b[idx]){
q.pop_back();
idx ++;
}
if (idx == n+1) return 1;
if (dfs(x+1,q,0,idx) || dfs(x+1,q,1,idx)) return 1;
return 0;
}
bool solve(){
int i;
rep(i,1,n) cin >> b[i];
deque <int> q;
if (dfs(1,q,0,1) || dfs(1,q,1,1)) return 1;
else return 0;
}
signed main(){
cin.tie(0);
cin >> n >> m;
int i;
rep(i,1,n) cin >> a[i];
while (m --){
if (solve()) cout << "Yes" << endl;
else cout << "No" << endl;
}
system("pause");
}