Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$inline on}
- {$optimization on}
- uses math;
- const FILEINP = '';
- FILEOUT = '';
- digit = 8;
- base = trunc(1e8);
- maxD = 2000;
- CharSet : Set Of Char = ['L', 'C', 'R', 'S', '*'];
- type Bignum = array[0 .. maxD] of longint;
- var f1, f2 : text;
- res : bignum;
- sumlast : bignum;
- count : bignum;
- procedure Open_f;
- begin
- assign(f1, FILEINP);
- reset(f1);
- assign(f2, FILEOUT);
- rewrite(f2);
- end;
- procedure Close_f;
- begin
- close(f1);
- close(f2);
- end;
- procedure Input;
- begin
- end;
- procedure Init;
- begin
- end;
- operator := (x : longint) ans : bignum; inline;
- begin
- fillchar(ans, sizeof(ans), 0);
- ans[1] := x;
- ans[0] := 1;
- end;
- operator * (x : bignum; y : longint) ans : bignum; inline;
- var i, save, temp : longint;
- begin
- fillchar(ans, sizeof(ans), 0);
- save := 0;
- for i := 1 to x[0] do
- begin
- temp := x[i] * y + save;
- ans[i] := temp mod base;
- save := temp div base;
- end;
- ans[0] := x[0];
- while (save > 0) do
- begin
- inc(ans[0]);
- ans[ans[0]] := save mod base;
- save := save div base;
- end;
- end;
- operator + (x, y : bignum) ans : bignum; inline;
- var i, save, temp : longint;
- begin
- fillchar(ans, sizeof(ans), 0);
- save := 0;
- for i := 1 to max(x[0], y[0]) do
- begin
- temp := x[i] + y[i] + save;
- ans[i] := temp mod base;
- save := temp div base;
- end;
- ans[0] := max(x[0], y[0]);
- while (save > 0) do
- begin
- inc(ans[0]);
- ans[ans[0]] := save mod base;
- save := save div base;
- end;
- end;
- operator - (x, y : bignum) ans : bignum; inline;
- var i, save, temp : longint;
- begin
- fillchar(ans, sizeof(ans), 0);
- save := 0;
- for i := 1 to x[0] do
- begin
- temp := x[i] - y[i] - save;
- if (temp < 0) then save := 1 else save := 0;
- temp := temp + save * base;
- ans[i] := temp mod base;
- end;
- ans[0] := x[0];
- while (ans[ans[0]] = 0) and (ans[0] > 1) do dec(ans[0]);
- end;
- procedure solve ;
- var c : char;
- begin
- res := 1;
- count := 1;
- sumlast := 1;
- while (true) do
- begin
- read(f1, c);
- if (not (c in CharSet)) then exit;
- if (c = 'L') then sumlast := sumlast * 3;
- if (c = 'C') then sumlast := sumlast * 3 + count;
- if (c = 'R') then sumlast := sumlast * 3 + count * 2;
- if (c = '*') then
- begin
- res := res * 4 - sumlast;
- sumlast := sumlast * 10 + count * 3;
- count := count * 4;
- end;
- if (c <> 'S') then res := res + sumlast;
- end;
- end ;
- procedure Output;
- var i, j : longint;
- s : string;
- begin
- i := maxD;
- while (res[i] = 0) do dec(i);
- write(f2, res[i]);
- for j := i - 1 downto 1 do
- begin
- str(res[j], s);
- while (length(s) < digit) do s := '0' + s;
- write(f2, s);
- end;
- end;
- begin
- Open_f;
- Input;
- Init;
- Solve;
- Output;
- Close_f;
- end.
Add Comment
Please, Sign In to add comment