Guest User

Untitled

a guest
Aug 12th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.67 KB | None | 0 0
  1. {$inline on}
  2. {$optimization on}
  3. uses math;
  4.  
  5. const FILEINP = '';
  6.       FILEOUT = '';
  7.       digit   = 8;
  8.       base    = trunc(1e8);
  9.       maxD    = 2000;
  10.       CharSet : Set Of Char = ['L', 'C', 'R', 'S', '*'];
  11.  
  12. type Bignum = array[0 .. maxD] of longint;
  13.  
  14. var f1, f2      : text;
  15.     res         : bignum;
  16.     sumlast     : bignum;
  17.     count       : bignum;
  18.  
  19. procedure Open_f;
  20.     begin
  21.         assign(f1, FILEINP);
  22.         reset(f1);
  23.         assign(f2, FILEOUT);
  24.         rewrite(f2);
  25.     end;
  26.  
  27. procedure Close_f;
  28.     begin
  29.         close(f1);
  30.         close(f2);
  31.     end;
  32.  
  33. procedure Input;
  34.     begin
  35.     end;
  36.  
  37. procedure Init;
  38.     begin
  39.     end;
  40.  
  41. operator := (x : longint) ans : bignum; inline;
  42.     begin
  43.         fillchar(ans, sizeof(ans), 0);
  44.         ans[1] := x;
  45.         ans[0] := 1;
  46.     end;
  47.  
  48. operator * (x : bignum; y : longint) ans : bignum; inline;
  49.     var i, save, temp : longint;
  50.     begin
  51.         fillchar(ans, sizeof(ans), 0);
  52.         save := 0;
  53.         for i := 1 to x[0] do
  54.             begin
  55.                 temp := x[i] * y + save;
  56.                 ans[i] := temp mod base;
  57.                 save := temp div base;
  58.             end;
  59.         ans[0] := x[0];
  60.         while (save > 0) do
  61.             begin
  62.                 inc(ans[0]);
  63.                 ans[ans[0]] := save mod base;
  64.                 save := save div base;
  65.             end;
  66.     end;
  67.  
  68. operator + (x, y : bignum) ans : bignum; inline;
  69.     var i, save, temp : longint;
  70.     begin
  71.         fillchar(ans, sizeof(ans), 0);
  72.         save := 0;
  73.         for i := 1 to max(x[0], y[0]) do
  74.             begin
  75.                 temp := x[i] + y[i] + save;
  76.                 ans[i] := temp mod base;
  77.                 save := temp div base;
  78.             end;
  79.         ans[0] := max(x[0], y[0]);
  80.         while (save > 0) do
  81.             begin
  82.                 inc(ans[0]);
  83.                 ans[ans[0]] := save mod base;
  84.                 save := save div base;
  85.             end;
  86.     end;
  87.  
  88. operator - (x, y : bignum) ans : bignum;   inline;
  89.     var i, save, temp : longint;
  90.     begin
  91.         fillchar(ans, sizeof(ans), 0);
  92.         save := 0;
  93.         for i := 1 to x[0] do
  94.             begin
  95.                 temp := x[i] - y[i] - save;
  96.                 if (temp < 0) then save := 1 else save := 0;
  97.                 temp := temp + save * base;
  98.                 ans[i] := temp mod base;
  99.             end;
  100.         ans[0] := x[0];
  101.         while (ans[ans[0]] = 0) and (ans[0] > 1) do dec(ans[0]);
  102.     end;
  103.  
  104. procedure solve ;
  105.     var c : char;
  106.     begin
  107.         res := 1;
  108.         count := 1;
  109.         sumlast := 1;
  110.         while (true) do
  111.             begin
  112.                 read(f1, c);
  113.                 if (not (c in CharSet)) then exit;
  114.                 if (c = 'L') then sumlast := sumlast * 3;
  115.                 if (c = 'C') then sumlast := sumlast * 3 + count;
  116.                 if (c = 'R') then sumlast := sumlast * 3 + count * 2;
  117.                 if (c = '*') then
  118.                     begin
  119.                         res := res * 4 - sumlast;
  120.                         sumlast := sumlast * 10 + count * 3;
  121.                         count   := count * 4;
  122.                     end;
  123.                 if (c <> 'S') then res := res + sumlast;
  124.             end;
  125.     end ;
  126.  
  127. procedure Output;
  128.     var i, j : longint;
  129.         s    : string;
  130.     begin
  131.         i := maxD;
  132.         while (res[i] = 0) do dec(i);
  133.         write(f2, res[i]);
  134.         for j := i - 1 downto 1 do
  135.             begin
  136.                 str(res[j], s);
  137.                 while (length(s) < digit) do s := '0' + s;
  138.                 write(f2, s);
  139.             end;
  140.     end;
  141.  
  142. begin
  143.     Open_f;
  144.     Input;
  145.     Init;
  146.     Solve;
  147.     Output;
  148.     Close_f;
  149. end.
Add Comment
Please, Sign In to add comment