RT
只有 #13 WA
记录:评测记录
代码:
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,int> Ar
{
{"H",10},
{"C",120},
{"N",140},
{"O",160},
{"F",190},
{"Na",230},
{"Mg",240},
{"Al",270},
{"Si",280},
{"P",310},
{"S",320},
{"Cl",355},
{"K",390},
{"Ca",400},
{"Mn",550},
{"Cu",640},
{"Zn",650},
{"Ag",1080},
{"I",1270},
{"Ba",1370},
{"Hf",1785},
{"Pt",1950},
{"Au",1970},
{"Hg",2010}
};
int ana(char* s)
{
char* xp=strchr(s,'~');
//printf("DEAL WITH:<%s>\n",s);
if(xp!=NULL)
{
*xp=0;
return ana(s)+ana(xp+1);
}
if(!isalpha(*s))
{
int rel;
char tmp[120];
sscanf(s,"%d%s",&rel,tmp);
return rel*ana(tmp);
}
int ans=0;int now=0;
for(char* r=s;*r;r++)
{
if(isalpha(*r))
{
ans+=now;
now=0;
char up[4]{};
up[0]=*r;
if(islower(*(r+1)))
{
++r;
up[1]=*r;
}
now=Ar[string(up)];
//printf("FIND:<%s> NOW=%d\n",up,now);
}
else if(*r=='(')
{
char*q=strchr(r,')');
*q=0;
ans+=now;
now=ana(r+1);
r=q+1;
}
if (*r=='_')
{
r+=2;
int p=0;
while(isdigit(*r))p=p*10+*(r++)-'0';
now*=p;
ans+=now;
now=0;
}
}
ans+=now;
//printf("RETURN %d\n",ans);
return ans;
}
char cc[599];
int main()
{
scanf("%s",cc);
int as=ana(cc);
printf("%d",as/10);
if((as/5)&1)printf(".5");
return 0;
}
验证码: