ぶんし


リンク:https://ac.nowcoder.com/acm/contest/6871/B出典:牛客網
分子時間制限:C/C++1秒、他の言語2秒空間制限:C/C++524288 K、他の言語1048576 K 64 bit IO Format:%lldテーマは遠いスカブロ市場で記述され、有機分子はC,H,Oの3つの元素からしか構成できない.珂学者たちの探査によると、C原子の式量は13で、H原子の式量は1で、O原子の式量は17である.1つの有機分子の式量はそれぞれの原子の式量の総和である.
有機分子式について以下の定義を与える.
             、    C, H, O       ;
                   ,     (        )       ;
                 ;
             ,            ;
              ,             。 

例えば(HH)3 H(H)、CO 2、CH 12、CHHOOはいずれも合法的な有機分子式である.
4 HC、CHTHOLLOY、CH 3(CH 2)3(CH(CH 3)2 CH 3)2(CH 2)3 CH 3はいずれも合法的な有機分子式ではない.
上記の要求に合致する分子式について、珂学者たちが分子式量を計算するのを助けることができますか?説明を入力:
分子式を表す文字列を含む1行のみを入力します.
上記の定義に合致することを保証し、文字列にはC、H、O、括弧、数字以外の文字が含まれず、長さは10510^5105を超えない.
出力の説明:
分子の式量を表す整数を1行に出力します.
答えは101510^{15}1015を超えないことを保証します.
例1入力コピー
CH3COOH
出力レプリケーション
64
例2入力コピー
CH3(CH2)10CH3
出力レプリケーション
182
例3入力コピー
H(HH)C(CH2)3O(H)1
出力レプリケーション
79
コメント:
スカブロ集市は魔法集市なので、化学の定義はメロンの世界とは少し異なるかもしれません.
第2の例では、12個のCと26個のHが現れた.
第3の例では4個のC,10個のH,および1個のOが出現した.
一部のプログラミング言語では、答えがあふれないように適切なデータ型を使用することに注意してください.
#include
#include
#include
#include
#include
using namespace std;
string s;
long long ans,cnt,mid,res;
int main()
{
	cin >> s;
	int m = s.length();
	//CH3COOH;
	for (int i = 0; i < m;)
	{
		if (s[i] == 'O' || s[i] == 'H' || s[i] == 'C'&&i < m)
		{
			if (s[i] == 'O')cnt = 17;
			if (s[i] == 'H')cnt = 1;
			if (s[i] == 'C')cnt = 13;
			i++;
			mid = 0;
			while (i < m&&s[i] >= '0'&&s[i] <= '9')
			{
				mid = mid * 10 + s[i] - '0';
				i++;
			}
			if (!mid)ans += cnt;
			else ans += mid * cnt;
	
		}
		else if (s[i] == '('&&i < m)
		{
		
			res += ans;
			ans = 0;
			i++;

		}
		else if (s[i] == ')'&&i < m)
		{
			mid = 0;
			i++;
			while (i < m&&s[i] >= '0'&&s[i] <= '9')
			{
				mid = mid * 10 + s[i] - '0';
				i++;
			}
			if (!mid) { res+=ans; }
			else res += mid * ans;
			ans = 0;
			

		}

		
	}
	res += ans;
	cout << res << endl;
}