#9 wa
代码
#include <bits/stdc++.h>
using namespace std;
double ans;
char a;
int li;
string s = "", c;
map<string, double> m;
string v[] = {"H", "C", "N", "O", "F", "Na", "Mg", "Al", "si", "P", "S", "Cl", "K", "Ca", "Mn", "Fe", "Cu", "Zn", "Ag", "I", "Ba", "Hf", "Pt", "Au", "Hg"};
void pr(){
m["H"] = 1;m["C"] = 12;m["N"] = 14;m["O"] = 16;m["F"] = 19;m["Na"] = 23;m["Mg"] = 24;m["Al"] = 27;m["si"] = 28;m["P"] = 31;m["S"] = 32;m["Cl"] = 35.5;m["K"] = 39;m["Ca"] = 40;m["Mn"] = 55;m["Fe"] = 56;m["Cu"] = 64;m["Zn"] = 65;m["Ag"] = 108;m["I"] = 127;m["Ba"] = 137;m["Hf"] = 178.5;m["Pt"] = 195;m["Au"] = 197;m["Hg"] = 201;
}
int check(int x){
int cnt = 0;
for(int i = x; c[i] != 'H'; i++){
cnt = cnt * 10 + c[i] - '0';
}
return cnt;
}
int check2(int x){
int cnt = 0;
for(int i = x; c[i] != '}'; i++){
cnt = cnt * 10 + c[i] - '0';
}
return cnt;
}
void init(){
bool flag = true, l = false;
int cnt = 0;
double sum = 0;
cin >> c;
c += '(';
for(int i = 0; i < c.size(); i++){
a = c[i];
if(a == '('){
sum += m[s];
ans += sum;
sum = 0;
s = "";
double sum2 = 0;
while(c[i] != ')' && i < c.size()){
a = c[i];
if(a == '_'){
string ss = "";
for(int j = li; j < i; j++){
ss += c[j];
}
sum2 += sum;
sum = m[ss];
i += 2;
int num = check2(i);
sum2 += sum * num;
while(c[i] != '}')i++;
s = "";
sum = 0;
}
else{
if(a >= 'A' && a <= 'Z'){
sum2 += m[s];
s = a;
li = i;
}else{
s += a;
}
}
i++;
}
if(i < c.size()){
i += 3;
sum2 += m[s];
int num = check2(i);
ans += sum2 * num;
while(c[i] != '}')i++;
s = "";
sum = 0;
}
}
else if(a == '~'){
if(c[i + 1] != 'H'){
int num = check(i + 1);
ans += num * 18;
}
else ans += 18;
return;
}
else if(a == '_'){
string ss = "";
for(int j = li; j < i; j++){
ss += c[j];
}
ans += sum;
sum = m[ss];
i += 2;
int num = check2(i);
ans += sum * num;
sum = 0;
while(c[i] != '}')i++;
s = "";
}
else{
if(a >= 'A' && a <= 'Z'){
sum += m[s];
s = a;
li = i;
}else{
s += a;
}
}
}
if(s != ""){
ans += m[s];
}
}
int main(){
pr();
init();
if(ans == int(ans))printf("%.0lf", ans);
else printf("%.1lf", ans);
return 0;
}