紫书 第三章 Molar Mess

狂wa
气死人的题

代码

#include<bits/stdc++.h>
using namespace std;

inline int read() {
    int ans = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')f = -1;
        ch = getchar();
    }
    while (ch <= '9' && ch >= '0') {
        ans = ans * 10 + ch - '0';
        ch = getchar();
    }
    return ans * f;
}
double v[] = {12.01,1.008,16.00,14.01};
int to(char c) {
    if (c=='C')
        return 0;
    if (c =='H')
        return 1;
    if (c=='O')
        return 2;
    return 3;
}
int main() {
    int t= read();
    while (t--)
    {
        string s;
        cin>>s;
        char pre = ' ';
        int a[4] = {0};
        int ans = 0;
        int sta = 0;
        for (int i = 0; i< s.size(); i++) {
            if (!sta)
            {
                if (!isdigit(s[i])) {
                    sta = 1;
                    pre = s[i];
                }
            }
            else if (sta == 1) {
                if (isdigit(s[i])) {
                    sta = 2;
                    ans = s[i] -'0';
                }
                else {
                    sta = 3;
                    a[to(pre)]++;
                    pre = s[i];
                }
            }
            else if (sta == 2) {
                if (isdigit(s[i])) {
                    ans = ans * 10 + s[i] -'0';
                }
                else {
                    sta = 3;
                    a[to(pre)] += ans;
                    ans = 0;
                    pre = s[i];
                }
            }
            else if (sta == 3) {
                if (isdigit(s[i])) {
                    sta = 2;
                    ans =  s[i] - '0';
                }
                else {
                    a[to(pre)]++;
                    pre = s[i];
                }

            }
        }
        if (sta == 1) {
            a[to(pre)]++;
        }
        else if (sta == 2) {
            a[to(pre)]+=ans;
        }
        else if (sta == 3) {
            a[to(pre)] ++;
        }

        double res = 0;
        for (int i = 0; i <4;i++) {
            res += v[i] * a[i];
        }
        cout<<fixed<<setprecision(3)<<res<<"\n";
    }
    return 0;
}
posted @ 2025-05-31 02:31  Guaninf  阅读(3)  评论(0)    收藏  举报