蒟蒻只A了9个点 求调orz
查看原帖
蒟蒻只A了9个点 求调orz
1415680
Miya09楼主2024/10/19 16:15
#include<bits/stdc++.h>
using namespace std;

map<string,float> Ar;

void init()
{
    Ar["H"]=1;
    Ar["C"]=12;
    Ar["N"]=14;
    Ar["O"]=16;
    Ar["F"]=19;
    Ar["Na"]=23;
    Ar["Mg"]=24;
    Ar["Al"]=27;
    Ar["Si"]=28;
    Ar["P"]=31;
    Ar["S"]=32;
    Ar["Cl"]=35.5;
    Ar["K"]=39;
    Ar["Ca"]=40;
    Ar["Mn"]=55;
    Ar["Fe"]=56;
    Ar["Cu"]=64;
    Ar["Zn"]=65;
    Ar["Ag"]=108;
    Ar["I"]=127;
    Ar["Ba"]=137;
    Ar["Hf"]=178.5;
    Ar["Pt"]=195;
    Ar["Au"]=197;
    Ar["Hg"]=201;
}

char ch[101];

int cs(int &i)
{
    int x=0;
    for(;ch[i]>='0' && ch[i]<='9';i++)
    {
        x=x*10+(ch[i]-'0');
    }
    return x;
}

float js(int &i)
{
    float s=0;
    float k=0;
//    if(ch[i]>='A' && ch[i]<='Z')
//    {
        if(ch[i+1]>='a' && ch[i+1]<='z')
        {
            char ys[3];
            ys[0]=ch[i];
            ys[1]=ch[i+1];
            k=Ar[ys];
            i+=2;
        }
        else
        {
            char ys[2];
            ys[0]=ch[i];
            k=Ar[ys];
            i++;
        }
//    }

    if(ch[i]=='_')
    {
        i+=2;
        s+=k*cs(i);
    }
    else
    {
        s+=k;
        i--;
    }

    return s;
}

int main()
{
    init();

    scanf("%s",ch);
    int l=strlen(ch);

    float ans=0;

    int r=l-1;
    for(int j=0;j<l;j++)
    {
        if(ch[j]=='~')
        {
            r=j-1;
            break;
        }
    }
    if(r!=l-1)
    {
        if(ch[r+2]=='H')
        {
            ans+=18;
        }
        else
        {
            r+=2;
            ans+=18*cs(r);
            r-=2;
        }
    }

    int i;
    for(i=0;i<=r;i++)
    {
        if(ch[i]>='A' && ch[i]<='Z')
        {
            ans+=js(i);
        }
        if(ch[i]=='(')
        {
            i++;
            float k;
            for(k=0;ch[i]!=')';i++)
            {
                k+=js(i);
                if(ch[i+1]=='_')
                {
                    i+=3;
                    ans+=k*cs(i);
                }
                else
                {
                    ans+=k;
                }
            }
        }
    }

    int int_ans=ans;
    if(int_ans==ans)
    {
        printf("%d\n",int_ans);
    }
    else
    {
        printf("%.1f\n",ans);
    }
    return 0;
}

评测记录

2024/10/19 16:15
加载中...