You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
//输入+输出重定向
|
|
|
|
|
freopen("../1392.in", "r", stdin);
|
|
|
|
|
freopen("../1392.out", "w", stdout);
|
|
|
|
|
|
|
|
|
|
int n;
|
|
|
|
|
stack<int> st;
|
|
|
|
|
int source[101] = {0};
|
|
|
|
|
int target[101] = {0};
|
|
|
|
|
|
|
|
|
|
unordered_map<int, int> _stackMap;
|
|
|
|
|
unordered_map<int, int> _outMap;
|
|
|
|
|
|
|
|
|
|
cin >> n;
|
|
|
|
|
//源数组+目标数组
|
|
|
|
|
for (int i = 1; i <= n; ++i) {
|
|
|
|
|
//原来的数组
|
|
|
|
|
// ----> 1 2 3 4
|
|
|
|
|
source[i] = i;
|
|
|
|
|
// ---->3 2 4 1
|
|
|
|
|
cin >> target[i];
|
|
|
|
|
}
|
|
|
|
|
//使用A进栈,B出栈进行模拟
|
|
|
|
|
for (int i = 1; i <= n;) {
|
|
|
|
|
int targetNum = target[i];
|
|
|
|
|
//如果栈中没有这个数字,那么需要从源数组逐个增加进来
|
|
|
|
|
if (_stackMap.count(targetNum) == 0) {
|
|
|
|
|
for (int j = 1; j <= n; ++j) {
|
|
|
|
|
if (_stackMap.count(source[j]) == 0 && _outMap[source[j]] == 0) {
|
|
|
|
|
st.push(source[j]);
|
|
|
|
|
_stackMap[source[j]]++;
|
|
|
|
|
cout << "A";
|
|
|
|
|
if (source[j] == targetNum) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else { //如果在栈里面有这个数字,那么需要逐个弹出,直接把这个数字弹出完毕
|
|
|
|
|
int c = st.top();
|
|
|
|
|
do {
|
|
|
|
|
st.pop();
|
|
|
|
|
_stackMap[c]--;
|
|
|
|
|
_outMap[c]++;
|
|
|
|
|
cout << "B";
|
|
|
|
|
i++;
|
|
|
|
|
} while (c != targetNum);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//关闭文件
|
|
|
|
|
fclose(stdin);
|
|
|
|
|
fclose(stdout);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|