[白俊]2527号:化学食糧


回答日:2021-11-02

質問する


質問リンク:https://www.acmicpc.net/problem/2257

アクセスと解析


これはstackを利用すれば簡単に解決できる問題です.
要素記号が表す数字が異なるため、stackタイプをどのように処理するかを考える際にstringを使用して解決できます.

コード#コード#

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    string expr = "";
    cin >> expr;
    stack<string> st;
    
    for (char c : expr) {
        string s = "";
        s += c;
        if (s == "(" || s == "H" || s == "C" || s == "O") {
            st.push(s);
        } else if (s == ")") {
            int num = 0;
            while (!st.empty() && st.top() != "(") {
                if (st.top() == "H") {
                    num += 1;
                } else if (st.top() == "C") {
                    num += 12;
                } else if (st.top() == "O") {
                    num += 16;
                } else {
                    num += stoi(st.top());
                }
                st.pop();
            }
            st.pop();
            st.push(to_string(num));
        } else if (s >= "1" && s <= "9") {
            int tmp = 0;
            if (st.top() == "H") {
                tmp = 1;
            } else if (st.top() == "C") {
                tmp = 12;
            } else if (st.top() == "O") {
                tmp = 16;
            } else {
                tmp = stoi(st.top());
            }
            st.pop();
            st.push(to_string(tmp * stoi(s)));
        }
    }
    
    int sum = 0;
    while (!st.empty()) {
        if (st.top() == "H") {
            sum += 1;
        } else if (st.top() == "C") {
            sum += 12;
        } else if (st.top() == "O") {
            sum += 16;
        } else {
            sum += stoi(st.top());
        }
        st.pop();
    }
    cout << sum;
    return 0;
}

結果



フィードバック


基本的な仕事にもっと集中しましょう.