第一个WA其他AC求调
查看原帖
第一个WA其他AC求调
1272259
cgxd楼主2024/7/10 09:15
#include<bits/stdc++.h>
using namespace std;
size_t cur;
string s;
double ans, f1, f2;
bool bl;
int num;
double get_wrd(){
	switch(s[cur]){
		case 'A':{
			switch(s[++cur]){
				case 'l':
					return 27;
				case 'g':
					return 108;
				case 'u':
					return 137;
			}
		}case 'B':{
			switch(s[++cur]){
				case 'a':
					return 137;
				case 'k':
					return 247;
				default:{
					--cur;
					return 11;
				}
			}
		}case 'C':{
			switch(s[++cur]){
				case 'a':
					return 40;
				case 'l':
					return 35.5;
				case 'u':
					return 64;
				default:{
					--cur;
					return 12;
				}
			}
		}case 'F':{
			switch(s[++cur]){
				case 'e':
					return 56;
				default:{
					--cur;
					return 19;
				}
			}
		}case 'H':{
			switch(s[++cur]){
				case 'f':
					return 178.5;
				case 'g':
					return 201;
				default:{
					--cur;
					return 1;
				}
			}
		}case 'I':
			return 127;
		case 'K':
			return 39;
		case 'M':{
			switch(s[++cur]){
				case 'g':
					return 24;
				case 'n':
					return 55;
			}
		}case 'N':{
			switch(s[++cur]){
				case 'a':
					return 23;
				default:{
					--cur;
					return 14;
				}
			}
		}case 'O':
			return 16;
		case 'P':{
			switch(s[++cur]){
				case 't':
					return 195;
				default:{
					--cur;
					return 31;
				}
			}
		}case 'S':{
			switch(s[++cur]){
				case 'b':
					return 122;
				case 'i':
					return 28;
				default:{
					--cur;
					return 32;
				}
			}
		}case 'Z':{
			++cur;
			return 65;
		}
	}return 0;
}int get_num(){
	int ans = 0;
	for(; isdigit(s[cur]) and cur < s.size(); ++cur)
		(ans *= 10) += s[cur] - '0';
	return ans;
}signed main(){
	cin >> s;
	while(cur < s.size()){
		switch(s[cur]){
			case '(':{
				bl = 1;
				++cur;
				f2 = 0;
				break;
			}case ')':{
				switch(s[++cur]){
					case '_':{
						cur += 2;
						num = get_num();
						++cur;
						break;
					}default:
						num = 1;
				}ans += num * f2;
				bl = 0;
				break;
			}case '~':{
				if(isdigit(s[++cur]))
					ans += 18 * get_num();
				else
					ans += 18;
				cout << ans;
				return 0;
			}default:{
				if(isalpha(s[cur])){
					f1 = get_wrd();
					switch(s[++cur]){
						case '_':{
							cur += 2;
							num = get_num();
							++cur;
							break;
						}default:
							num = 1;
					}if(bl)
						f2 += f1 * num;
					else
						ans += f1 * num;
				}
			}
		}
	}cout << ans;
	return 0;
}
2024/7/10 09:15
加载中...