社区讨论
TLE on #4 #7 #12 求助
P4711「化学」相对分子质量参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mma3lzyy
- 此快照首次捕获于
- 2026/03/03 12:19 上周
- 此快照最后确认于
- 2026/03/06 13:15 4 天前
石山代码
CPP#include<bits/stdc++.h>
using namespace std;
double ys_zl[26]={0,1,12,14,16,19,23,24,27,28,31,32,35.5,39,40,55,56,64,65,108,127,137,178.5,195,197,201};
string ys_mc[26]={"","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"};
double cl(string dqcl)
{
for(int i=1;i<=25;i++)
{
if(dqcl==ys_mc[i])
{
return ys_zl[i];
}
}
}
int main()
{
string s;
cin>>s;
double ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]!='_')
{
string dqys;
dqys+=s[i];
ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]!='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]=='_')
{
string dqys;
dqys+=s[i];
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
ans+=now_ans*sl;
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]=='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
ans+=now_ans*sl;
}
else if(s[i]=='(')
{
double left_ans=0;
while(s[i]!=')')
{
i++;
if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]!='_')
{
string dqys;
dqys+=s[i];
left_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]!='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
left_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]=='_')
{
string dqys;
dqys+=s[i];
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
left_ans+=now_ans*sl;
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]=='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
left_ans+=now_ans*sl;
}
}
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
ans+=left_ans*sl;
}
else
{
i++;
int sl=0;
if(i>=s.size())break;
int c_ans=0;
if(s[i]<'0'||s[i]>'9')sl=1;
else
{
while(s[i]>='0'&&s[i]<='9')
{
sl=sl*10+(s[i]-'0');
i++;
}
}
while(1)
{
if(i>=s.size()||s[i]=='~')break;
if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]!='_')
{
string dqys;
dqys+=s[i];
c_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]!='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
c_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]=='_')
{
string dqys;
dqys+=s[i];
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
c_ans+=now_ans*sl;
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]=='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
c_ans+=now_ans*sl;
}
else if(s[i]=='(')
{
double left_ans=0;
while(s[i]!=')')
{
i++;
if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]!='_')
{
string dqys;
dqys+=s[i];
left_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]!='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
left_ans+=cl(dqys);
}
else if(s[i]>='A'&&s[i]<='Z'&&(!(s[i+1]>='a'&&s[i+1]<='z'))&&s[i+1]=='_')
{
string dqys;
dqys+=s[i];
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
left_ans+=now_ans*sl;
}
else if(s[i]>='A'&&s[i]<='Z'&&s[i+1]>='a'&&s[i+1]<='z'&&s[i+2]=='_')
{
string dqys;
dqys+=s[i];
dqys+=s[i+1];
i++;
double now_ans=cl(dqys);
int sl=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sl=sl*10+(s[i]-'0');
i++;
}
left_ans+=now_ans*sl;
}
}
int sll=0;
i+=3;
while(1)
{
if(s[i]<'0'||s[i]>'9')break;
sll=sll*10+(s[i]-'0');
i++;
}
c_ans+=left_ans*sll;
}
}
i++;
}
}
cout<<ans;
return 0;
}
~不会调回复
共 4 条回复,欢迎继续交流。
正在加载回复...