BOJ:1874スタックカウント(C++)


質問する



Code

#include <iostream>
#include <stack>
#include <vector>

using namespace std;
stack<int> S,tmp;
vector<char> V;

bool findStack(int x)
{
    for(int i=0;i<tmp.size();i++)
    {
        int t = tmp.top();
        tmp.pop();
        if(t == x){
            return true;
        }
    }
    return false;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N,input,max,flag=0;
    cin >> N;

    max = 0;
    for(int i=0;i<N;i++)
    {
        cin >> input;
        if(input >= max)
        {
            for(int j=max+1;j<=input;j++)
            {
                S.push(j);
                V.push_back('+');
            }
            max = input;
            S.pop();
            V.push_back('-');
        }else if(input < max)
        {
            tmp = S;
            if(findStack(input))
            {
                for(int j=0;j<S.size();j++)
                {
                    int t = S.top();
                    S.pop();
                    V.push_back('-');
                    if(t == input)
                        break;
                }
            }else{
                flag = 1;
            }
        }
    }
    if(flag)
        cout << "NO";
    else
    {
        for(auto a : V)
            cout << a << '\n';
    }
}
  • 問題の理解が難しい.
    (参照:https://m.blog.naver.com/PostView.nhn?blogId=occidere&logNo=220812563361&proxyReferer=https:%2F%2Fwww.google.com%2F)
  • input(入力値)がmaxより大きい場合は、max+1からstackに値をプッシュします!
  • input
  • 最終的に不可能な場合、flag=1で判断する
  • を出力する.