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.

58 lines
1.6 KiB

2 years ago
#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;
}