【題解】Codeforces 1435D. Shurikens

【題目敘述】http://codeforces.com/contest/1435/problem/D

#include <bits/stdc++.h>
using namespace std;
 
int n;
vector <int> v, ans;
stack <int> stk;
 
int main(){
    cin >> n;
    int a;
    char c;
    for (int i = 0; i < n*2; i++){
        cin >> c;
        if (c == '-'){
            cin >> a;
            v.push_back(-a);
        }
        else v.push_back(1);
    }
    bool flag = true;
    while (v.size()){
        a = v.back();
        if (a < 0){
            a = -a;
            if (!stk.empty() && a > stk.top()){
                flag = false;
                break;
            }
            stk.push(a);
        }
        else{
            if (stk.empty()){
                flag = false;
                break;
            }
            ans.push_back(stk.top());
            stk.pop();
        }
        v.pop_back();
    }
    if (!flag){
        cout << "NO\n";
        return 0;
    }
    cout << "YES\n";
    reverse(ans.begin(), ans.end());
    for (int i:ans){
        cout << i << " ";
    }
    cout << "\n";
}
分享本文 Share with friends