SETNJA - Setnja

Tác giả: ll931110

Ngôn ngữ: Pascal

{$inline on}
{$MODE DELPHI}
{$H+}
program SETNJA;
const
  input  = '';
  output = '';
  base = 100000000;
  maxd = 900;
type
  arr = array[1..maxd] of longint;
var
  m,res: arr;
  s: string;

procedure init;inline;
var
  f: text;
begin
  assign(f, input);
    reset(f);

  readln(f, s);

  close(f);
end;

procedure mul1(k: integer);inline;
var
  i: integer;
begin
  for i := 1 to maxd do res[i] := res[i] * k;
  for i := 1 to maxd - 1 do if res[i] > base then
    begin
      res[i + 1] := res[i + 1] + res[i] div base;
      res[i] := res[i] mod base;
    end;
end;

procedure mul2(k: integer);inline;
var
  i: integer;
begin
  for i := 1 to maxd do m[i] := m[i] * k;
  for i := 1 to maxd - 1 do if m[i] > base then
    begin
      m[i + 1] := m[i + 1] + m[i] div base;
      m[i] := m[i] mod base;
    end;
end;


procedure ad2;inline;
var
  i: integer;
begin
  for i := 1 to maxd do res[i] := res[i] + m[i];
  for i := 1 to maxd - 1 do if res[i] > base then
    begin
      inc(res[i + 1]);
      res[i] := res[i] - base;
    end;
end;

procedure solve;inline;
var
  i: integer;
begin
  fillchar(res, sizeof(res), 0);
  res[1] := 1;

  fillchar(m, sizeof(m), 0);
  m[1] := 1;

  for i := 1 to length(s) do
    case s[i] of
      'L': mul1(2);
      'R':
        begin
          mul1(2);
          ad2;
        end;
      '*':
        begin
          mul1(5);
          ad2;
          mul2(3);
        end;
    end;
end;

procedure printresult;inline;
var
  f: text;
  st: string;
  i,j,k: integer;
begin
  assign(f, output);
    rewrite(f);

  i := maxd;
  while res[i] = 0 do dec(i);

  write(f, res[i]);
  for j := i - 1 downto 1 do
    begin
      str(res[j],st);
      for k := 1 to 8 - length(st) do write(f, 0);
      write(f, res[j]);
    end;

  close(f);
end;

begin
  init;
  solve;
  printresult;
end.

Download