小猴编程C++ | 轨道

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】

为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端被封死,驶入C的车厢必须按照相反的顺序驶出C。对于每个车厢,一旦进入C就不能再回到A了;一旦从C移入B,也不能再回到C了。换句话说,车厢的移动只能从AC或者从CB

【输入】

第一行,包含一个整数 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

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/133914755