NC210352. 分子
描述
输入描述
输入仅一行,包含一个字符串,代表分子式。
保证符合上述定义,字符串中不含除 C, H ,O,括号和数字以外的字符,且长度不超过 。
输出描述
在一行中输出一个整数,代表该分子的式量。
保证答案不超过 。
示例1
输入:
CH3COOH
输出:
64
示例2
输入:
CH3(CH2)10CH3
输出:
182
示例3
输入:
H(HH)C(CH2)3O(H)1
输出:
79
C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 496K, 提交时间: 2020-08-05 21:01:36
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<string.h> #include<ctype.h> char s[200000]; long long len,i; long long max(long long a,long long b){ return a>b?a:b; } long long fun(){ long long t=0,ans=0; for(i;i<len;i++){ long long k=0; while(s[i]>='0'&&s[i]<='9'){ k=k*10+s[i]-'0'; i++; } ans+=t*max(k,1); t=0; if(s[i]=='H')t=1; else if(s[i]=='O')t=17; else if(s[i]=='C')t=13; if(s[i]=='('){ i++; t=fun(); } else if(s[i]==')')break; } ans+=t; return ans; } int main(){ gets(s); len=strlen(s); printf("%lld",fun()); return 0; }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 548K, 提交时间: 2020-09-30 20:43:07
#include<bits/stdc++.h> typedef long long ll; using namespace std; char a[100005]; int b[100]; int i=0; int t; ll fun() { ll n=0; ll x=0; for(i;i<t;i++) { ll s=0; while(a[i]>='0'&&a[i]<='9'){ s=s*10+(a[i]-'0'); i++; } n=n+x*max(s,1LL);; x=0; if(a[i]=='O')x=17; if(a[i]=='H')x=1; if(a[i]=='C')x=13; if(a[i]=='(') { i++; x=fun(); } else if(a[i]==')')break; } n=n+x; return n; } int main() { scanf("%s",a); t=strlen(a); cout<<fun()<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 584K, 提交时间: 2020-08-05 18:35:07
#include<iostream> using namespace std; typedef long long ll; string s; ll i,n; ll solve(){ ll ans=0,ji=0; for(;i<n;i++){ ll xs=0; while(s[i]>='0'&&s[i]<='9'){ xs=xs*10LL+s[i]-'0'; i++; } ans+=ji*max(xs,1LL); ji=0; if(s[i]=='H') ji=1; if(s[i]=='O') ji=17; if(s[i]=='C') ji=13; if(s[i]=='('){ i++; ji=solve(); } else if(s[i]==')') break; } ans+=ji; return ans; } int main(){ cin>>s; n=s.size(); cout<<solve()<<endl; return 0; }
Python3 解法, 执行用时: 496ms, 内存消耗: 54492K, 提交时间: 2022-06-13 16:37:00
s=input() i=1 d=set('0123456789') while i<len(s): if s[i] in d and s[i-1] not in d: s = s[:i]+'*'+s[i:] i+=2 else: i+=1 s=s.replace('H','+1').replace('C','+13').replace('O','+17').replace('(','+(') print(eval(s))