白駿1874号(ByC++)


質問する


白駿アルゴリズム1874号



コード#コード#

#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
using namespace std;

int main() {
    int n, t;
    cin >> n;
    queue<int> q;
    for (int i = 0; i < n; i++) {
        cin >> t;
        q.push(t);
    }
    int j = 1;
    stack<int> s;
    vector<string> ans;
    while (!q.empty()) {
        if (s.empty()) {
            ans.push_back("+");
            s.push(j);
            j++;
        }
        if (s.top() > q.front()) {
            cout << "NO" << '\n';
            return 0;
        } else if (s.top() == q.front()) {
            ans.push_back("-");
            s.pop();
            q.pop();
            if (!q.empty() && s.empty()) {
                ans.push_back("+");
                s.push(j);
                j++;
            }
        } else {
            for (; j <= q.front(); j++) {
                ans.push_back("+");
                s.push(j);
            }
            if (s.top() == q.front()) {
                ans.push_back("-");
                s.pop();
                q.pop();
            }
        }
    }

    for (auto i = ans.begin(); i < ans.end(); i++) {
        cout << *i << '\n';
    }
    return 0;
}
私のような人は、問題を理解するのに時間がかかりすぎたので、問題の説明を残したいと思っています.パソコンが1から順番に増えると、数字を入れることができる場所があります.私はその場所を上から積み上げた.次に,ユーザが入力した数字をqueueとし,上から順番にスタックに数字を入れ,queueの先端にあればpopとする.
私はもともと話ができないので、今度これを見たときに理解できるかどうか分かりません.説明とコードを一緒に見れば、どうしても理解できるでしょう…?