luogu4711 「化学」相对分子质量

网友投稿 214 2022-09-02

luogu4711 「化学」相对分子质量

​​ 恶心模拟

#includeusing namespace std;map MM;inline void init(){ string A="H";MM[A]=1; A="C";MM[A]=12; A="N";MM[A]=14; A="O";MM[A]=16; A="F";MM[A]=19; A="Na";MM[A]=23; A="Mg";MM[A]=24; A="Al";MM[A]=27; A="Si";MM[A]=28; A="P";MM[A]=31; A="S";MM[A]=32; A="Cl";MM[A]=35.5; A="K";MM[A]=39; A="Ca";MM[A]=40; A="Mn";MM[A]=55; A="Fe";MM[A]=56; A="Cu";MM[A]=64; A="Zn";MM[A]=65; A="Ag";MM[A]=108; A="I";MM[A]=127; A="Ba";MM[A]=137; A="Hf";MM[A]=178.5; A="Pt";MM[A]=195; A="Au";MM[A]=197; A="Hg";MM[A]=201;}char s[110];int x,n;double ans;char s1[1];inline double calc(){ ++x;double res=0; while(s[x]!=')'){double tmp=0,nm=0; if (s[x+1]>='a'&&s[x+1]<='z'){ s1[0]=s[x]; string aa=s1;s1[0]=s[x+1]; string bb=s1;aa=aa+bb; tmp=MM[aa];x+=2; }else{ s1[0]=s[x]; string aa=s1; tmp=MM[aa];++x; } if (s[x]=='_'){ while(s[x]<'0'||s[x]>'9') ++x; while(s[x]<='9'&&s[x]>='0') nm=nm*10+s[x]-'0',++x; }else nm=1;res+=tmp*nm; if (s[x]=='}') ++x; }++x;return res;}int main(){// freopen("2.in","r",stdin); scanf("%s",s+1);init();n=strlen(s+1);bool flag=0; for (x=1;x<=n;){double tmp=0,nm=0; if (s[x]=='(') tmp=calc(); else{ if (s[x+1]>='a'&&s[x+1]<='z'){ s1[0]=s[x]; string aa=s1;s1[0]=s[x+1]; string bb=s1;aa=aa+bb; tmp=MM[aa];x+=2; }else{ s1[0]=s[x]; string aa=s1; tmp=MM[aa];++x; } } if (s[x]=='_'){ while(s[x]<'0'||s[x]>'9') ++x; while(s[x]<='9'&&s[x]>='0') nm=nm*10+s[x]-'0',++x; }else nm=1;ans+=tmp*nm; if (s[x]=='}') ++x; if (s[x]=='~') {flag=1;++x;break;} }double nm=0; for (;x<=n;){ if (s[x]<='9'&&s[x]>='0'){ while(s[x]<'0'||s[x]>'9') ++x; while(s[x]<='9'&&s[x]>='0') nm=nm*10+s[x]-'0',++x;break; }else {nm=1;break;} }if (flag) ans+=nm*18; printf("%f\n",ans); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:餐饮营销正走出低价怪圈,绝对下沉市场餐饮门店收缩!(餐饮低价竞争)
下一篇:bzoj 4197 [Noi2015]寿司晚宴
相关文章

 发表评论

暂时没有评论,来抢沙发吧~