wa 求助
  • 板块学术版
  • 楼主ce_375
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/20 15:45
  • 上次更新2023/10/27 06:47:29
查看原帖
wa 求助
668288
ce_375楼主2022/10/20 15:45

题目传送

#9 wa

代码

#include <bits/stdc++.h>
using namespace std;
double ans;
char a;
int li;
string s = "", c;
map<string, double> m;
string v[] = {"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"};
void pr(){
	m["H"] = 1;m["C"] = 12;m["N"] = 14;m["O"] = 16;m["F"] = 19;m["Na"] = 23;m["Mg"] = 24;m["Al"] = 27;m["si"] = 28;m["P"] = 31;m["S"] = 32;m["Cl"] = 35.5;m["K"] = 39;m["Ca"] = 40;m["Mn"] = 55;m["Fe"] = 56;m["Cu"] = 64;m["Zn"] = 65;m["Ag"] = 108;m["I"] = 127;m["Ba"] = 137;m["Hf"] = 178.5;m["Pt"] = 195;m["Au"] = 197;m["Hg"] = 201;
}
int check(int x){
	int cnt = 0;
	for(int i = x; c[i] != 'H'; i++){
		cnt = cnt * 10 + c[i] - '0';
	}
	return cnt;
}
int check2(int x){
	int cnt = 0;
	for(int i = x; c[i] != '}'; i++){
		cnt = cnt * 10 + c[i] - '0';
	}
	return cnt;
}
void init(){
	bool flag = true, l = false;
	int cnt = 0;
	double sum = 0;
	cin >> c;
	c += '(';
	for(int i = 0; i < c.size(); i++){
		a = c[i];
		if(a == '('){
			sum += m[s];
			ans += sum;
			sum = 0;
			s = "";
			double sum2 = 0;
			while(c[i] != ')' && i < c.size()){
				a = c[i];
				if(a == '_'){
					string ss = "";
					for(int j = li; j < i; j++){
						ss += c[j];
					}
					sum2 += sum;
					sum = m[ss];
					i += 2;
					int num = check2(i);
					sum2 += sum * num;
					while(c[i] != '}')i++;
					s = "";
					sum = 0;
				}
				else{
					if(a >= 'A' && a <= 'Z'){
						sum2 += m[s];
						s = a;
						li = i;
					}else{
						s += a;
					}
				}
				i++;
			}
			if(i < c.size()){
				i += 3;
				sum2 += m[s];
				int num = check2(i);
				ans += sum2 * num;
				while(c[i] != '}')i++;
				s = "";
				sum = 0;
			}
		}
		else if(a == '~'){
			if(c[i + 1] != 'H'){
				int num = check(i + 1);
				ans += num * 18;
			}
			else ans += 18;
			return;
		}
		else if(a == '_'){
			string ss = "";
			for(int j = li; j < i; j++){
				ss += c[j];
			}
			ans += sum;
			sum = m[ss];
			i += 2;
			int num = check2(i);
			ans += sum * num;
			sum = 0;
			while(c[i] != '}')i++;
			s = "";
		}
		else{
			if(a >= 'A' && a <= 'Z'){
				sum += m[s];
				s = a;
				li = i;
			}else{
				s += a;
			}
		}
	}
	if(s != ""){
		ans += m[s];
	}
}
int main(){
	pr();
	init();
	if(ans == int(ans))printf("%.0lf", ans);
	else printf("%.1lf", ans);
	return 0;
} 
2022/10/20 15:45
加载中...