about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--others/volume1/002.pas2
-rw-r--r--others/volume1/004.pas2
-rw-r--r--others/volume1/006.pas2
-rw-r--r--others/volume1/013.pas2
-rw-r--r--others/volume1/014.pas2
-rw-r--r--others/volume1/018.pas2
-rw-r--r--others/volume1/023.pas2
-rw-r--r--others/volume1/024.pas2
-rw-r--r--others/volume1/027.pas2
-rw-r--r--others/volume1/029.pas2
-rw-r--r--others/volume1/030.pas13
-rw-r--r--others/volume1/032.pas2
-rw-r--r--others/volume1/034.pas2
-rw-r--r--others/volume1/035.pas12
-rw-r--r--others/volume1/045.pas2
-rw-r--r--others/volume1/050.pas9
-rw-r--r--others/volume1/051.pas16
-rw-r--r--others/volume1/052.pas24
-rw-r--r--others/volume1/053.pas20
-rw-r--r--others/volume1/054.pas21
-rw-r--r--others/volume1/055.pas18
-rw-r--r--others/volume1/056.pas17
-rw-r--r--others/volume1/057.pas14
-rw-r--r--others/volume1/058.pas16
-rw-r--r--others/volume1/059.pas17
-rw-r--r--others/volume1/060.pas17
-rw-r--r--others/volume1/061.pas21
-rw-r--r--others/volume1/062.pas29
-rw-r--r--others/volume1/065.pas19
-rw-r--r--others/volume1/067.pas16
-rw-r--r--others/volume1/068.pas39
-rw-r--r--others/volume1/clib.pas (renamed from others/volume1/cmath.pas)104
-rw-r--r--others/volume1/sortnfind.pas80
33 files changed, 432 insertions, 116 deletions
diff --git a/others/volume1/002.pas b/others/volume1/002.pas
index a60a15c..7cbdd50 100644
--- a/others/volume1/002.pas
+++ b/others/volume1/002.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   m: int64;
diff --git a/others/volume1/004.pas b/others/volume1/004.pas
index 9ade431..e619f50 100644
--- a/others/volume1/004.pas
+++ b/others/volume1/004.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   prime: array [2..1000000] of boolean;
diff --git a/others/volume1/006.pas b/others/volume1/006.pas
index 878f077..2413c32 100644
--- a/others/volume1/006.pas
+++ b/others/volume1/006.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   a, b, g: int64;
diff --git a/others/volume1/013.pas b/others/volume1/013.pas
index d257945..98f5df9 100644
--- a/others/volume1/013.pas
+++ b/others/volume1/013.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: shortint;
diff --git a/others/volume1/014.pas b/others/volume1/014.pas
index 3407e70..fa98e0a 100644
--- a/others/volume1/014.pas
+++ b/others/volume1/014.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: shortint;
diff --git a/others/volume1/018.pas b/others/volume1/018.pas
index 053095c..0e2d293 100644
--- a/others/volume1/018.pas
+++ b/others/volume1/018.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: int64;
diff --git a/others/volume1/023.pas b/others/volume1/023.pas
index 6092889..80feb29 100644
--- a/others/volume1/023.pas
+++ b/others/volume1/023.pas
@@ -1,4 +1,4 @@
-uses strutils, cmath;
+uses strutils, clib;
 
 var
   n, u: int64;
diff --git a/others/volume1/024.pas b/others/volume1/024.pas
index affcbaa..df07a88 100644
--- a/others/volume1/024.pas
+++ b/others/volume1/024.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: int64;
diff --git a/others/volume1/027.pas b/others/volume1/027.pas
index 0b285bd..5f57027 100644
--- a/others/volume1/027.pas
+++ b/others/volume1/027.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: int64;
diff --git a/others/volume1/029.pas b/others/volume1/029.pas
index 255331f..c590f47 100644
--- a/others/volume1/029.pas
+++ b/others/volume1/029.pas
@@ -1,4 +1,4 @@
-uses sortnfind;
+uses clib;
 
 var
   n, i: int16;
diff --git a/others/volume1/030.pas b/others/volume1/030.pas
index 95490f2..ffa983b 100644
--- a/others/volume1/030.pas
+++ b/others/volume1/030.pas
@@ -1,17 +1,8 @@
+uses clib;
+
 var
   s: ansistring;
 
-function ispalindrome(s: ansistring): boolean;
-  var
-    n, i: int32;
-  begin
-    n := length(s);
-    for i := 1 to n do
-      if s[i] <> s[n - i + 1] then
-        exit(false);
-      ispalindrome := true
-  end;
-
 begin
   readln(s);
   if ispalindrome(s) then
diff --git a/others/volume1/032.pas b/others/volume1/032.pas
index 7813997..f9c823a 100644
--- a/others/volume1/032.pas
+++ b/others/volume1/032.pas
@@ -1,4 +1,4 @@
-uses sortnfind;
+uses clib;
 
 var
   n, i: int16;
diff --git a/others/volume1/034.pas b/others/volume1/034.pas
index 1e34793..2b21194 100644
--- a/others/volume1/034.pas
+++ b/others/volume1/034.pas
@@ -1,4 +1,4 @@
-uses math, sortnfind;
+uses math, clib;
 
 var
   n, i: int16;
diff --git a/others/volume1/035.pas b/others/volume1/035.pas
index ccf9560..649e398 100644
--- a/others/volume1/035.pas
+++ b/others/volume1/035.pas
@@ -1,17 +1,9 @@
+uses clib;
+
 var
   n, a: int16;
   b: array of boolean;
 
-function all(b: array of boolean): boolean;
-  var
-    i: int16;
-  begin
-    for i := 0 to length(b) - 1 do
-      if not b[i] then
-        exit(false);
-    all := true
-  end;
-
 begin
   readln(n);
   setlength(b, n);
diff --git a/others/volume1/045.pas b/others/volume1/045.pas
index eca1c9d..b1917ee 100644
--- a/others/volume1/045.pas
+++ b/others/volume1/045.pas
@@ -1,4 +1,4 @@
-uses cmath;
+uses clib;
 
 var
   n: int8 = 0;
diff --git a/others/volume1/050.pas b/others/volume1/050.pas
new file mode 100644
index 0000000..cae9eb4
--- /dev/null
+++ b/others/volume1/050.pas
@@ -0,0 +1,9 @@
+uses math, strutils;
+
+var
+  n: int64;
+
+begin
+  readln(n);
+  writeln(inttobin(n, trunc(log2(n)) + 1))
+end.
diff --git a/others/volume1/051.pas b/others/volume1/051.pas
new file mode 100644
index 0000000..d19fe39
--- /dev/null
+++ b/others/volume1/051.pas
@@ -0,0 +1,16 @@
+var
+  n, i, v, a: int32;
+
+begin
+  readln(n, v);
+  for i := 1 to n do
+    begin
+      read(a);
+      if a = v then
+        begin
+          writeln('YES'#10, i);
+          exit
+        end;
+    end;
+  writeln('NO')
+end.
diff --git a/others/volume1/052.pas b/others/volume1/052.pas
new file mode 100644
index 0000000..8a071a0
--- /dev/null
+++ b/others/volume1/052.pas
@@ -0,0 +1,24 @@
+uses clib;
+
+var
+  n, a: int16;
+  b: array of boolean;
+
+begin
+  readln(n);
+  setlength(b, n);
+  for n := n - 1 downto 0 do
+    b[n] := false;
+  for n := 1 to length(b) do
+    begin
+      read(a);
+      if (a <= 0) or
+         (a > length(b)) then
+        continue;
+      b[a - 1] := true
+    end;
+  if all(b) then
+    writeln('YES')
+  else
+    writeln('NO')
+end.
diff --git a/others/volume1/053.pas b/others/volume1/053.pas
new file mode 100644
index 0000000..f3c8a4e
--- /dev/null
+++ b/others/volume1/053.pas
@@ -0,0 +1,20 @@
+var
+  n, i: int16;
+  a: array of int32;
+  v: int32;
+
+begin
+  readln(n);
+  setlength(a, n + 1);
+  for i := 0 to n - 1 do
+    read(a[i]);
+  readln(i, v);
+  repeat
+    a[n] := a[n - 1];
+    dec(n)
+  until n = i;
+  a[i - 1] := v;
+  for i := 0 to length(a) - 2 do
+    write(a[i], ' ');
+  writeln(a[length(a) - 1])
+end.
diff --git a/others/volume1/054.pas b/others/volume1/054.pas
new file mode 100644
index 0000000..ad29f4d
--- /dev/null
+++ b/others/volume1/054.pas
@@ -0,0 +1,21 @@
+uses clib;
+
+var
+  n, c: int16;
+  a: int32;
+  s: int64 = 0;
+
+begin
+  readln(n);
+  c := 0;
+  repeat
+    read(a);
+    if issquare(a) then
+      begin
+        inc(c);
+        s := s + a
+      end;
+    dec(n)
+  until n = 0;
+  writeln(c, ' ', s)
+end.
diff --git a/others/volume1/055.pas b/others/volume1/055.pas
new file mode 100644
index 0000000..0e57447
--- /dev/null
+++ b/others/volume1/055.pas
@@ -0,0 +1,18 @@
+var
+  n, i, j: int16;
+  a, min: int64;
+ 
+begin
+  min := 9223372036854775807;
+  readln(n);
+  for i := 1 to n do
+    begin
+      read(a);
+      if a < min then
+        begin
+          j := i;
+          min := a
+        end
+    end;
+  writeln(j, ' ', min)
+end.
diff --git a/others/volume1/056.pas b/others/volume1/056.pas
new file mode 100644
index 0000000..8fdc2dc
--- /dev/null
+++ b/others/volume1/056.pas
@@ -0,0 +1,17 @@
+uses sysutils, clib;
+
+var
+  n, count: int16;
+  a: int64;
+
+begin
+  count := 0;
+  readln(n);
+  repeat
+    readln(a);
+    if ispalindrome(inttostr(a)) then
+      inc(count);
+    dec(n)
+  until n = 0;
+  writeln(count)
+end.
diff --git a/others/volume1/057.pas b/others/volume1/057.pas
new file mode 100644
index 0000000..91fc22d
--- /dev/null
+++ b/others/volume1/057.pas
@@ -0,0 +1,14 @@
+var
+  n, i, j: int16;
+  a: int64;
+
+begin
+  readln(n, i);
+  for j := 1 to n do
+    begin
+      read(a);
+      if i <> j then
+        write(a, ' ')
+    end;
+  writeln
+end.
diff --git a/others/volume1/058.pas b/others/volume1/058.pas
new file mode 100644
index 0000000..f5c4d6b
--- /dev/null
+++ b/others/volume1/058.pas
@@ -0,0 +1,16 @@
+uses clib;
+
+var
+  n, i: int16;
+  a: array of int64;
+
+begin
+  readln(n);
+  setlength(a, n);
+  for i := 0 to n - 1 do
+    read(a[i]);
+  qsort(a);
+  for i := 0 to n - 2 do
+    write(a[i], ' ');
+  writeln(a[n - 1])
+end.
diff --git a/others/volume1/059.pas b/others/volume1/059.pas
new file mode 100644
index 0000000..61095ab
--- /dev/null
+++ b/others/volume1/059.pas
@@ -0,0 +1,17 @@
+uses clib;
+
+var
+  n: int16;
+  a, s: int64;
+
+begin
+  s := 0;
+  readln(n);
+  repeat
+    read(a);
+    if isprime(a) then
+      s := s + a;
+    dec(n)
+  until n = 0;
+  writeln(s)
+end.
diff --git a/others/volume1/060.pas b/others/volume1/060.pas
new file mode 100644
index 0000000..8fdc2dc
--- /dev/null
+++ b/others/volume1/060.pas
@@ -0,0 +1,17 @@
+uses sysutils, clib;
+
+var
+  n, count: int16;
+  a: int64;
+
+begin
+  count := 0;
+  readln(n);
+  repeat
+    readln(a);
+    if ispalindrome(inttostr(a)) then
+      inc(count);
+    dec(n)
+  until n = 0;
+  writeln(count)
+end.
diff --git a/others/volume1/061.pas b/others/volume1/061.pas
new file mode 100644
index 0000000..46bf839
--- /dev/null
+++ b/others/volume1/061.pas
@@ -0,0 +1,21 @@
+var
+  n, i: int16;
+  a, b: array of int16;
+
+begin
+  readln(n);
+  setlength(a, n);
+  setlength(b, n);
+  for i := 0 to n - 1 do
+    begin
+      read(a[i]);
+      b[a[i] - 1] := i + 1
+    end;
+  for i := 0 to n - 1 do
+    if a[i] <> b[i] then
+      begin
+        writeln('NO');
+        exit
+      end;
+  writeln('YES')
+end.
diff --git a/others/volume1/062.pas b/others/volume1/062.pas
new file mode 100644
index 0000000..715d005
--- /dev/null
+++ b/others/volume1/062.pas
@@ -0,0 +1,29 @@
+var
+  m, n, i: int16;
+  a: array of int32;
+  b: int32;
+
+begin
+  readln(m, n);
+  setlength(a, m);
+  for i := 0 to m - 1 do
+    read(a[i]);
+  i := 0;
+  repeat
+    read(b);
+    while (i < m) and
+          (a[i] <= b) do
+      begin
+        write(a[i], ' ');
+        inc(i)
+      end;
+    write(b, ' ');
+    dec(n)
+  until n = 0;
+  while i < m do
+    begin
+      write(a[i], ' ');
+      inc(i)
+    end;
+  writeln
+end.
diff --git a/others/volume1/065.pas b/others/volume1/065.pas
new file mode 100644
index 0000000..6e9106c
--- /dev/null
+++ b/others/volume1/065.pas
@@ -0,0 +1,19 @@
+var
+  n, i, k: int32;
+  b: array of boolean;
+
+begin
+  readln(n, k);
+  setlength(b, n);
+  for i := 0 to n - 1 do
+    b[i] := true;
+  repeat
+    read(i);
+    b[i - 1] := false;
+    dec(k)
+  until k = 0;
+  for i := 0 to n - 1 do
+    if b[i] then
+      write(i + 1, ' ');
+  writeln
+end.
diff --git a/others/volume1/067.pas b/others/volume1/067.pas
new file mode 100644
index 0000000..f5c4d6b
--- /dev/null
+++ b/others/volume1/067.pas
@@ -0,0 +1,16 @@
+uses clib;
+
+var
+  n, i: int16;
+  a: array of int64;
+
+begin
+  readln(n);
+  setlength(a, n);
+  for i := 0 to n - 1 do
+    read(a[i]);
+  qsort(a);
+  for i := 0 to n - 2 do
+    write(a[i], ' ');
+  writeln(a[n - 1])
+end.
diff --git a/others/volume1/068.pas b/others/volume1/068.pas
new file mode 100644
index 0000000..fa568dc
--- /dev/null
+++ b/others/volume1/068.pas
@@ -0,0 +1,39 @@
+var
+  n, m, i, j: int16;
+  a: array of array of int32;
+  s: int64 = 0;
+
+begin
+  readln(n, m);
+  setlength(a, n + 2);
+  setlength(a[0], m + 2);
+  for i := 0 to m + 1 do
+    a[0][i] := 0;
+  for i := 1 to n do
+    begin
+      setlength(a[i], m + 2);
+      a[i][0] := 0;
+      for j := 1 to m do
+        read(a[i][j]);
+      a[i][m + 1] := 0
+    end;
+  setlength(a[n + 1], m + 2);
+  for i := 0 to m + 1 do
+    a[n + 1][i] := 0;
+
+  for i := 1 to n do
+    for j := 1 to m do
+      if a[i][j] <> 0 then
+        begin
+          if a[i][j] > a[i - 1][j] then
+            s := s + a[i][j] - a[i - 1][j];
+          if a[i][j] > a[i + 1][j] then
+            s := s + a[i][j] - a[i + 1][j];
+          if a[i][j] > a[i][j - 1] then
+            s := s + a[i][j] - a[i][j - 1];
+          if a[i][j] > a[i][j + 1] then
+            s := s + a[i][j] - a[i][j + 1];
+          s := s + 1
+        end;
+  writeln(s)
+end.
diff --git a/others/volume1/cmath.pas b/others/volume1/clib.pas
index 67b22a5..28dffb2 100644
--- a/others/volume1/cmath.pas
+++ b/others/volume1/clib.pas
@@ -1,8 +1,11 @@
-(* Common mathematical functions and data *)
-unit cmath;
+(* Common library *)
+unit clib;
 
 interface
 
+  type
+    intar = array of int64;
+
   const
     factorial: array[1..20] of uint64 = (
       1,
@@ -122,12 +125,57 @@ interface
       12200160415121876738
     );
 
+  procedure qsort(var a : intar);
   function gcd(x, y: int64): int64;
   function isprime(x: int64): boolean;
   function issquare(x: int64): boolean;
+  function ispalindrome(s: ansistring): boolean;
+  function all(b: array of boolean): boolean;
+  function binin(
+    a: intar;
+    x: int64
+  ): boolean;
+
 
 implementation
 
+  procedure qsort(var a : intar);
+    procedure sort(l, r: int64);
+      var
+        i, j, x, y: int64;
+
+      begin
+        i := l;
+        j := r;
+        x := a[(l + r) div 2];
+
+        repeat
+          while a[i] < x do
+            i := i + 1;
+          while x < a[j] do
+            j := j - 1;
+
+          if i <= j then
+            begin
+              y := a[i];
+              a[i] := a[j];
+              a[j] := y;
+              i := i + 1;
+              j := j - 1
+            end
+        until i > j;
+
+        if l < j then
+          sort(l, j);
+        if i < r then
+          sort(i, r)
+      end;
+
+    begin
+      sort(0, length(a) - 1)
+    end;
+
+
   function gcd(x, y: int64): int64;
     var z: int64;
     begin
@@ -140,6 +188,7 @@ implementation
       gcd := x
     end;
 
+
   function isprime(x: int64): boolean;
     var i: int32;
     begin
@@ -151,9 +200,60 @@ implementation
       isprime := true
     end;
 
+
   function issquare(x: int64): boolean;
     begin
       issquare := (x >= 0) and (sqr(trunc(sqrt(x))) = x)
     end;
 
+
+  function ispalindrome(s: ansistring): boolean;
+    var
+      n, i: int32;
+    begin
+      n := length(s);
+      for i := 1 to n div 2 do
+        if s[i] <> s[n - i + 1] then
+          exit(false);
+        ispalindrome := true
+    end;
+
+
+  function all(b: array of boolean): boolean;
+    var
+      i: boolean;
+    begin
+      for i in b do
+        if not i then
+          exit(false);
+      all := true
+    end;
+
+
+  function binin(
+    a: intar;
+    x: int64
+  ): boolean;
+
+    var
+      l, h, mid: uint64;
+
+    begin
+      l := 0;
+      h := length(a) - 1;
+
+      while l <= h do
+        begin
+          mid := (l + h) div 2;
+          if x = a[mid] then
+            exit(true)
+          else if x < a[mid] then
+            h := mid - 1
+          else
+            l := mid + 1
+        end;
+
+      binin := false
+    end;
+
 end.
diff --git a/others/volume1/sortnfind.pas b/others/volume1/sortnfind.pas
deleted file mode 100644
index 24f48f6..0000000
--- a/others/volume1/sortnfind.pas
+++ /dev/null
@@ -1,80 +0,0 @@
-unit sortnfind;
-
-interface
-
-  type
-    intar = array of int64;
-
-  procedure qsort(var a : intar);
-
-  function binin(
-    a: intar;
-    x: int64
-  ): boolean;
-
-implementation
-
-  procedure qsort(var a : intar);
-    procedure sort(l, r: int64);
-      var
-        i, j, x, y: int64;
-
-      begin
-        i := l;
-        j := r;
-        x := a[(l + r) div 2];
-
-        repeat
-          while a[i] < x do
-            i := i + 1;
-          while x < a[j] do
-            j := j - 1;
-
-          if i <= j then
-            begin
-              y := a[i];
-              a[i] := a[j];
-              a[j] := y;
-              i := i + 1;
-              j := j - 1
-            end
-        until i > j;
-
-        if l < j then
-          sort(l, j);
-        if i < r then
-          sort(i, r)
-      end;
-
-    begin
-      sort(0, length(a) - 1)
-    end;
-
-
-  function binin(
-    a: intar;
-    x: int64
-  ): boolean;
-
-    var
-      l, h, mid: uint64;
-
-    begin
-      l := 0;
-      h := length(a) - 1;
-
-      while l <= h do
-        begin
-          mid := (l + h) div 2;
-          if x = a[mid] then
-            exit(true)
-          else if x < a[mid] then
-            h := mid - 1
-          else
-            l := mid + 1
-        end;
-
-      binin := false
-    end;
-
-end.