紫书 第三章 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;
}

浙公网安备 33010602011771号