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.

Download