aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-21 21:09:39 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-21 21:09:39 +0700
commit7d19f480637e9e880b98dabfbcf8e885b0a2d3b9 (patch)
treefa52914a2e58bc13570839fa297be05b7b7616bf
parentf2d4bc6b7c302dee2d84a3acf84b83b5a98c45fa (diff)
downloadcp-7d19f480637e9e880b98dabfbcf8e885b0a2d3b9.tar.gz
Update others/volume1
-rw-r--r--others/volume1/001.scm3
-rw-r--r--others/volume1/077.pas59
-rw-r--r--others/volume1/078.pas60
-rw-r--r--others/volume1/080.pas17
-rw-r--r--others/volume1/081.pas30
-rw-r--r--others/volume1/082.pas20
-rw-r--r--others/volume1/086.scm7
-rw-r--r--others/volume1/092.pas10
-rw-r--r--others/volume1/095.pas11
-rw-r--r--others/volume1/096.pas34
-rw-r--r--others/volume1/112.pas39
-rw-r--r--others/volume1/113.pas28
-rw-r--r--others/volume1/clib.pas32
13 files changed, 347 insertions, 3 deletions
diff --git a/others/volume1/001.scm b/others/volume1/001.scm
index 4e6573b..93f3f89 100644
--- a/others/volume1/001.scm
+++ b/others/volume1/001.scm
@@ -1,2 +1 @@
-(display (let ((a (read)) (b (read))) (exact->inexact (/ (+ a b) 2))))
-(newline)
+(format #t "~a\n" (exact->inexact (/ (+ (read) (read)) 2)))
diff --git a/others/volume1/077.pas b/others/volume1/077.pas
new file mode 100644
index 0000000..2d13a4d
--- /dev/null
+++ b/others/volume1/077.pas
@@ -0,0 +1,59 @@
+uses clib;
+
+var
+ n, m: int32;
+ a, b, c: array of int64;
+ i, j: int64;
+
+begin
+ readln(n, m);
+ setlength(a, n);
+ repeat
+ dec(n);
+ read(a[n])
+ until n = 0;
+ qsort(a);
+ setlength(b, m);
+ repeat
+ dec(m);
+ read(b[m])
+ until m = 0;
+ qsort(b);
+
+ setlength(c, 0);
+ for i in a do
+ if (bsearch(b, i) > -1) and
+ ((length(c) = 0) or (c[length(c) - 1] < i)) then
+ begin
+ setlength(c, length(c) + 1);
+ c[length(c) - 1] := i
+ end;
+
+ for i in c do
+ begin
+ dec(n, 2);
+ j := bsearch(a, i);
+ for m := j downto 0 do
+ if a[m] = i then
+ inc(n)
+ else
+ break;
+ for m := j to length(a) - 1 do
+ if a[m] = i then
+ inc(n)
+ else
+ break;
+ j := bsearch(b, i);
+ for m := j downto 0 do
+ if b[m] = i then
+ inc(n)
+ else
+ break;
+ for m := j to length(b) - 1 do
+ if b[m] = i then
+ inc(n)
+ else
+ break
+ end;
+ writeln(n)
+end.
diff --git a/others/volume1/078.pas b/others/volume1/078.pas
new file mode 100644
index 0000000..a202c6a
--- /dev/null
+++ b/others/volume1/078.pas
@@ -0,0 +1,60 @@
+uses clib;
+
+var
+ n, i, j: int16;
+ m: int32 = 0;
+ a, b: array of int16;
+
+procedure sort(l, h: int32);
+ var
+ i, j, k: int32;
+ tmp: int16;
+ begin
+ i := l;
+ j := h;
+ k := (l + h) div 2;
+ repeat
+ while a[i] * b[k] < a[k] * b[i] do
+ inc(i);
+ while a[j] * b[k] > a[k] * b[j] do
+ dec(j);
+ if i <= j then
+ begin
+ tmp := a[i];
+ a[i] := a[j];
+ a[j] := tmp;
+ tmp := b[i];
+ b[i] := b[j];
+ b[j] := tmp;
+ inc(i);
+ dec(j)
+ end
+ until i > j;
+
+ if l < j then
+ sort(l, j);
+ if i < h then
+ sort(i, h)
+ end;
+
+begin
+ readln(n);
+ setlength(a, m);
+ setlength(b, m);
+ for i := 1 to n do
+ for j := 1 to n do
+ if gcd(i, j) = 1 then
+ begin
+ inc(m);
+ setlength(a, m);
+ a[m - 1] := i;
+ setlength(b, m);
+ b[m - 1] := j
+ end;
+ sort(0, m - 1);
+ writeln(m);
+ repeat
+ dec(m);
+ writeln(a[m], ' ', b[m])
+ until m = 0;
+end.
diff --git a/others/volume1/080.pas b/others/volume1/080.pas
new file mode 100644
index 0000000..599511a
--- /dev/null
+++ b/others/volume1/080.pas
@@ -0,0 +1,17 @@
+var
+ n, i, j: int32;
+ b: array of boolean;
+
+begin
+ readln(n);
+ setlength(b, n + 1);
+ for i := 2 to n do
+ b[i] := true;
+ for i := 2 to trunc(sqrt(n)) do
+ if b[i] then
+ for j := 2 to n div i do
+ b[i * j] := false;
+ for i := 2 to n do
+ if b[i] then
+ writeln(i)
+end.
diff --git a/others/volume1/081.pas b/others/volume1/081.pas
new file mode 100644
index 0000000..11dce4b
--- /dev/null
+++ b/others/volume1/081.pas
@@ -0,0 +1,30 @@
+var
+ b: array[0..1000001] of boolean;
+ n, a, i, max: int32;
+
+begin
+ for i := 0 to 1000001 do
+ b[i] := false;
+ readln(n);
+ repeat
+ dec(n);
+ read(a);
+ b[a] := true
+ until n = 0;
+ max := 1;
+ while n < 1000000 do
+ if b[n + 1] and not b[n] then
+ for i := n + 1 to 1000001 do
+ begin
+ if not b[i] then
+ begin
+ if i - n > max then
+ max := i - n;
+ n := i;
+ break
+ end
+ end
+ else
+ inc(n);
+ writeln(max - 1)
+end.
diff --git a/others/volume1/082.pas b/others/volume1/082.pas
new file mode 100644
index 0000000..f195aa7
--- /dev/null
+++ b/others/volume1/082.pas
@@ -0,0 +1,20 @@
+uses clib;
+
+var
+ n: int16;
+ a, g, l: int32;
+
+begin
+ read(n, a);
+ g := a;
+ l := a;
+ while n > 1 do
+ begin
+ dec(n);
+ read(a);
+ g := gcd(g, a);
+ l := l * a div gcd(l, a);
+ writeln(a, ' ', g, ' ', l)
+ end;
+ writeln(g, ' ', l)
+end.
diff --git a/others/volume1/086.scm b/others/volume1/086.scm
new file mode 100644
index 0000000..a45a81d
--- /dev/null
+++ b/others/volume1/086.scm
@@ -0,0 +1,7 @@
+(define (collatz n output)
+ (if (> n 1)
+ (if (= (remainder n 2) 0)
+ (collatz (quotient n 2) (append output '("x 2\n")))
+ (collatz (+ (* n 3) 1) (append output '("div 3\n"))))
+ output))
+(for-each display (reverse (collatz (read) '())))
diff --git a/others/volume1/092.pas b/others/volume1/092.pas
new file mode 100644
index 0000000..246d8cf
--- /dev/null
+++ b/others/volume1/092.pas
@@ -0,0 +1,10 @@
+uses strutils;
+
+var
+ s: ansistring;
+
+begin
+ readln(s);
+ s := delspace1(' ' + s + ' ');
+ writeln(copy(s, 2, length(s) - 2))
+end.
diff --git a/others/volume1/095.pas b/others/volume1/095.pas
new file mode 100644
index 0000000..56300d1
--- /dev/null
+++ b/others/volume1/095.pas
@@ -0,0 +1,11 @@
+uses strutils;
+
+var
+ s: ansistring;
+ i: int32;
+
+begin
+ readln(s);
+ s := ' ' + delspace1(s) + ' ';
+ write(replacetext(copy(s, 2, length(s) - 1), ' ', chr(10)))
+end.
diff --git a/others/volume1/096.pas b/others/volume1/096.pas
new file mode 100644
index 0000000..4cb877c
--- /dev/null
+++ b/others/volume1/096.pas
@@ -0,0 +1,34 @@
+uses math, strutils;
+
+var
+ a, b: ansistring;
+ n: int16;
+ remain: boolean = false;
+ d: uint8;
+
+begin
+ readln(a);
+ readln(b);
+ n := max(length(a), length(b)) + 1;
+ a := addchar('0', a, n);
+ b := addchar('0', b, n);
+ repeat
+ if remain then
+ d := ord(a[n]) + ord(b[n]) - 47
+ else
+ d := ord(a[n]) + ord(b[n]) - 48;
+ if d > 57 then
+ begin
+ dec(d, 10);
+ remain := true
+ end
+ else
+ remain := false;
+ a[n] := chr(d);
+ dec(n)
+ until n = 0;
+ if ord(a[1]) = 48 then
+ writeln(copy(a, 2, length(a) - 1))
+ else
+ writeln(a)
+end.
diff --git a/others/volume1/112.pas b/others/volume1/112.pas
new file mode 100644
index 0000000..0dec65e
--- /dev/null
+++ b/others/volume1/112.pas
@@ -0,0 +1,39 @@
+uses clib;
+
+var
+ a, b: int64;
+ i, j: int32;
+ p: array[2..999983] of boolean;
+ primes: intar;
+
+begin
+ for i := 2 to 999983 do
+ p[i] := true;
+ for i := 2 to 997 do
+ for j := 2 to 999983 div i do
+ p[i * j] := false;
+ j := 0;
+ setlength(primes, 78498);
+ for i := 2 to 999983 do
+ if p[i] then
+ begin
+ primes[j] := i;
+ inc(j)
+ end;
+
+ repeat
+ readln(a, b);
+ a := a * b div sqr(gcd(a, b));
+ b := 0;
+ for i := 0 to bisect_left(primes, trunc(sqrt(a))) do
+ while a mod primes[i] = 0 do
+ begin
+ a := a div primes[i];
+ b := b + 1
+ end;
+ if a = 1 then
+ writeln(b)
+ else
+ writeln(b + 1)
+ until eof(input)
+end.
diff --git a/others/volume1/113.pas b/others/volume1/113.pas
new file mode 100644
index 0000000..64d2af5
--- /dev/null
+++ b/others/volume1/113.pas
@@ -0,0 +1,28 @@
+const
+ cond: array[0..2] of set of char = (
+ ['A', 'H', 'I', 'M', 'O', 'T', 'U', 'V', 'W', 'X', 'Y'],
+ ['B', 'C', 'D', 'E', 'H', 'I', 'K', 'O', 'X'],
+ ['H', 'I', 'N', 'O', 'S', 'X', 'Y']
+ );
+
+var
+ s: ansistring;
+ c: char;
+ b: array[0..2] of boolean;
+ i: int8;
+
+begin
+ readln(s);
+ for i := 0 to 2 do
+ b[i] := true;
+ for c in s do
+ for i := 0 to 2 do
+ b[i] := b[i] and (c in cond[i]);
+ for i := 0 to 2 do
+ if b[i] then
+ write('+')
+ else
+ write('-');
+ writeln
+end.
+end.
diff --git a/others/volume1/clib.pas b/others/volume1/clib.pas
index 101bad3..b9037cd 100644
--- a/others/volume1/clib.pas
+++ b/others/volume1/clib.pas
@@ -125,16 +125,21 @@ 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;
+
+ procedure qsort(var a : intar);
function bsearch(
a: intar;
x: int64
): int64;
+ function bisect_left(
+ a: intar;
+ x: int64
+ ): int64;
implementation
@@ -176,6 +181,7 @@ implementation
end;
+ (* Translated from Python 3 math module *)
function gcd(x, y: int64): int64;
var z: int64;
begin
@@ -254,4 +260,28 @@ implementation
bsearch := -1
end;
+
+ (* Translated from Python 3 bisect module *)
+ function bisect_left(
+ a: intar;
+ x: int64
+ ): int64;
+
+ var
+ l, h, m: int64;
+
+ begin
+ l := 0;
+ h := length(a);
+ while l < h do
+ begin
+ m := (l + h) div 2;
+ if a[m] < x then
+ l := m + 1
+ else
+ h := m
+ end;
+ bisect_left := l
+ end;
+
end.