STMASS - Khối lượng phân tử

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Hợp chất hữu cơ chỉ gồm các nguyên tố ~C, H, O~ có khối lượng nguyên tử lần lượt là ~12, 1~ và ~16~.

Người ta viết công thức phân tử của hợp chất hữu cơ ở dạng "nén", ví dụ COOHHH là CO2H3 hay CH(CO2H)(CO2H)(CO2H) là CH(CO2H)3. Nếu ở dạng nén thì số lần lặp là một số ~2 ≤ k ≤ 9~.

Cho công thức phân tử của một hợp chất hữu cơ, hãy tính khối lượng phân tử của nó.

Input

  • Dòng đầu ghi số nguyên ~T~ là số bộ test;
  • ~T~ dòng tiếp theo, mỗi dòng chứa một xâu ký tự biểu diễn công thức phân tử của hợp chất hữu cơ.

Giới hạn:

  • ~1 ≤ T ≤ 1000~; độ dài công thức của mỗi hóa chất không quá ~1000~.

Output

  • Gồm ~T~ dòng, mỗi dòng một số nguyên dương là khối lượng của hợp chất ở test tương ứng.

Sample

Input #1
3
COOH
CH(CO2H)3
((CH)2(OH2H)(CHO))3
Output #1
45
148
222

Problem source: Chuyên Sơn La Online Judge


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    gtmailong  đã bình luận lúc 27, Tháng 4, 2024, 17:05

    include <iostream>

    #include <cstring>
    
    using namespace std;
    
    long klpt(string s) {
        long Stack[10005];
        long T = -1;
        for (char p : s) {
            if (p == 'C') Stack[++T]= 12;
            else if (p == 'H') Stack[++T] = 1;
            else if (p == 'O') Stack[++T] = 16;
            else if (p == '(') Stack[++T] = 0;
            else if (p==')'){
                long u = 0;
                while (Stack[T] > 0) {
                    u += Stack[T--];// 
                } 
                Stack[T] = u;
            }
            else Stack[T] *= p - '0';
        }
        long k = 0;
        cout << '\n';
        while (T>=0) k += Stack[T--];
        return k;
    }
    
    int main() {
        int n;
        cin >> n;
        while (n--) {
            string s;
            cin >> s;
            cout << klpt(s) << endl;
        }
        return 0;
    }