社区讨论

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 条回复,欢迎继续交流。

正在加载回复...