学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端被封死,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦进入C就不能再回到A了;一旦从C移入B,也不能再回到C了。换句话说,车厢的移动只能从A到C或者从C到B。
【输入】
第一行,包含一个整数 n。
第二行,包含 n 个空格隔开的字符串 s1,s2,⋯,sn,保证字符串 si 中只包含大小写字母。
【输出】
一行,包含 n 个空格隔开整数,表示结果。
【输入样例】
5
ab a aa ba aa
【输出样例】
2 3 5 4 1
【代码详解】
#include <bits/stdc++.h>
#include <stack>
using namespace std;
int n;
stack<int> st;
string s[100010], mins[100010];
int main()
{
cin >> n;
for (int i=1; i<=n; i++) cin >> s[i];
mins[n] = s[n];
for (int i=n-1; i>=1; i--) {
mins[i] = min(mins[i+1], s[i]);
}
for (int i=1; i<=n; i++) {
st.push(i);
while (st.size() && s[st.top()]<=mins[i+1]) {
cout << st.top() << " ";
st.pop();
}
}
while (st.size()) {
cout << st.top() << " ";
st.pop();
}
return 0;
}
【运行结果】
5
ab a aa ba aa
2 3 5 4 1