about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-13 10:29:05 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-13 10:29:05 +0700
commitac0a1ea7dabaee1b986927efb25e94a3a091fff5 (patch)
tree5765f412d59d73303c2ec981da4c4e1ef073bb99
parent36461ea5c65fcdf7169abdb39549ef53a15d4f03 (diff)
downloadcp-ac0a1ea7dabaee1b986927efb25e94a3a091fff5.tar.gz
Update others/volume1
-rw-r--r--others/volume1/036.pas57
-rw-r--r--others/volume1/040.pas27
-rw-r--r--others/volume1/044.pas34
-rw-r--r--others/volume1/045.pas31
-rw-r--r--others/volume1/046.pas16
-rw-r--r--others/volume1/cmath.pas22
-rw-r--r--others/volume1/sortnfind.pas12
7 files changed, 192 insertions, 7 deletions
diff --git a/others/volume1/036.pas b/others/volume1/036.pas
new file mode 100644
index 0000000..a958e93
--- /dev/null
+++ b/others/volume1/036.pas
@@ -0,0 +1,57 @@
+var
+  n, i: int16;
+  a: array of int64;
+  idx: array of int16;
+
+
+procedure sort(l, r: int16);
+  var
+    i, j: int16;
+    x, y: int64;
+
+  begin
+    i := l;
+    j := r;
+    x := a[(l + r) div 2];
+
+    repeat
+      while a[i] < x do
+        inc(i);
+
+      while x < a[j] do
+        dec(j);
+
+      if i <= j then
+        begin
+          y := a[i];
+          a[i] := a[j];
+          a[j] := y;
+          y := idx[i];
+          idx[i] := idx[j];
+          idx[j] := y;
+          inc(i);
+          dec(j)
+        end
+    until i > j;
+
+    if l < j then
+      sort(l, j);
+    if i < r then
+      sort(i, r)
+  end;
+
+
+begin
+  readln(n);
+  setlength(a, n);
+  setlength(idx, n);
+  for i := 0 to n - 1 do
+    begin
+      read(a[i]);
+      idx[i] := i + 1
+    end;
+  sort(0, n - 1);
+  for i in idx do
+    write(i, ' ');
+  writeln
+end.
diff --git a/others/volume1/040.pas b/others/volume1/040.pas
new file mode 100644
index 0000000..919304c
--- /dev/null
+++ b/others/volume1/040.pas
@@ -0,0 +1,27 @@
+var
+  n, i, c: int16;
+  x, a, b: int32;
+  s: array of boolean;
+
+begin
+  c := 0;
+  readln(n, x);
+  setlength(s, n);
+  for i := 0 to n - 1 do
+    s[i] := false;
+  for i := 0 to n - 1 do
+    begin
+      readln(a, b);
+      if (a <= x) and
+         (x <= b) then
+        begin
+          inc(c);
+          s[i] := true
+        end
+    end;
+  writeln(c);
+  for i := 0 to n - 1 do
+    if s[i] then
+      write(i + 1, ' ');
+  writeln
+end.
diff --git a/others/volume1/044.pas b/others/volume1/044.pas
new file mode 100644
index 0000000..1ac29fe
--- /dev/null
+++ b/others/volume1/044.pas
@@ -0,0 +1,34 @@
+var
+  n, n0, m, m0, i: int16;
+  a: array of int16;
+  b: array of boolean;
+
+begin
+  readln(n, m);
+  n0 := n;
+  setlength(a, n);
+  setlength(b, n);
+  for i := 0 to n - 1 do
+    b[i] := true;
+  i := -1;
+  while n0 > 0 do
+    begin
+      m0 := m;
+      while m0 > 0 do
+        begin
+          repeat
+            if i < n - 1 then
+              inc(i)
+            else
+              i := 0
+          until b[i];
+          dec(m0)
+        end;
+      b[i] := false;
+      a[n - n0] := i + 1;
+      dec(n0)
+    end;
+  for i in a do
+    write(i, ' ');
+  writeln
+end.
diff --git a/others/volume1/045.pas b/others/volume1/045.pas
new file mode 100644
index 0000000..eca1c9d
--- /dev/null
+++ b/others/volume1/045.pas
@@ -0,0 +1,31 @@
+uses cmath;
+
+var
+  n: int8 = 0;
+  i, j, c: int8;
+  p: array[1..20] of uint8;
+  b: array of boolean;
+  idx: uint64 = 1;
+
+begin
+  while not eof(input) do
+    begin
+      inc(n);
+      read(p[n])
+    end;
+  setlength(b, n + 1);
+  for i := 1 to n do
+    b[i] := true;
+  for i := 1 to n do
+    begin
+      c := 0;
+      for j := 1 to n do
+        if j = p[i] then
+          break
+        else if b[j] then
+          inc(c);
+      idx := idx + c * factorial[n - i];
+      b[p[i]] := false
+    end;
+  writeln(idx)
+end.
diff --git a/others/volume1/046.pas b/others/volume1/046.pas
new file mode 100644
index 0000000..146ba7a
--- /dev/null
+++ b/others/volume1/046.pas
@@ -0,0 +1,16 @@
+var
+  n, i, j: int16;
+
+begin
+  readln(n);
+  for i := 0 to n - 1 do
+    begin
+      if i mod 2 = 0 then
+        for j := 1 to n do
+          write(i * n + j, ' ')
+      else
+        for j := n downto 1 do
+          write(i * n + j, ' ');
+      writeln
+    end
+end.
diff --git a/others/volume1/cmath.pas b/others/volume1/cmath.pas
index 9f4f1f5..67b22a5 100644
--- a/others/volume1/cmath.pas
+++ b/others/volume1/cmath.pas
@@ -4,6 +4,28 @@ unit cmath;
 interface
 
   const
+    factorial: array[1..20] of uint64 = (
+      1,
+      2,
+      6,
+      24,
+      120,
+      720,
+      5040,
+      40320,
+      362880,
+      3628800,
+      39916800,
+      479001600,
+      6227020800,
+      87178291200,
+      1307674368000,
+      20922789888000,
+      355687428096000,
+      6402373705728000,
+      121645100408832000,
+      2432902008176640000
+    );
     fibonacci: array[1..93] of uint64 = (
       1,
       1,
diff --git a/others/volume1/sortnfind.pas b/others/volume1/sortnfind.pas
index a65cde0..24f48f6 100644
--- a/others/volume1/sortnfind.pas
+++ b/others/volume1/sortnfind.pas
@@ -15,9 +15,9 @@ interface
 implementation
 
   procedure qsort(var a : intar);
-    procedure sort(l, r: integer);
+    procedure sort(l, r: int64);
       var
-        i, j, x, y: integer;
+        i, j, x, y: int64;
 
       begin
         i := l;
@@ -26,24 +26,22 @@ implementation
 
         repeat
           while a[i] < x do
-            inc(i);
-
+            i := i + 1;
           while x < a[j] do
-            dec(j);
+            j := j - 1;
 
           if i <= j then
             begin
               y := a[i];
               a[i] := a[j];
               a[j] := y;
-              inc(i);
+              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;