MMASS - Mass of Molecule
Tác giả: RR
Ngôn ngữ: Pascal
//Written by Nguyen Thanh Trung
{$R+,Q+}
{$Mode objFPC}
uses math;
const
FINP='';
FOUT='';
MAXN=111;
so:array['0'..'9'] of longint=(0,1,2,3,4,5,6,7,8,9);
var
f1,f2:text;
n:longint;
s:string;
stack,left:array[1..MAXN] of longint;
procedure openF;
begin
assign(f1,FINP); reset(f1);
assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
close(f1);
close(f2);
end;
function cal(l,r:longint):longint;
var
i,sum:longint;
begin
sum:=0;
i:=r+1;
while i>l do
begin
i-=1;
case s[i] of
'C': sum+=12;
'O': sum+=16;
'H': sum+=1;
'0'..'9': if s[i-1]=')' then
begin
sum+=cal(left[i-1]+1,i-2)*so[s[i]];
i:=left[i-1];
end
else
begin
sum+=cal(i-1,i-1)*so[s[i]];
i-=1;
end;
')': begin
sum+=cal(left[i]+1,i-1);
i:=left[i];
end;
end;
end;
exit(sum);
end;
procedure init;
var
top,i:longint;
begin
top:=0;
for i:=1 to n do
if s[i]='(' then
begin
inc(top);
stack[top]:=i;
end
else if s[i]=')' then
begin
left[i]:=stack[top];
dec(top);
end;
end;
begin
openF;
readln(f1,s); n:=length(s);
init;
writeln(f2,cal(1,n));
closeF;
end.