about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--11/Q-2017/README.md119
-rw-r--r--11/Q-2017/cau1.scm8
-rw-r--r--11/Q-2017/cau2.scm5
-rw-r--r--11/Q-2017/cau3.scm7
-rw-r--r--11/Q-2017/cau4.scm11
5 files changed, 150 insertions, 0 deletions
diff --git a/11/Q-2017/README.md b/11/Q-2017/README.md
new file mode 100644
index 0000000..1342abb
--- /dev/null
+++ b/11/Q-2017/README.md
@@ -0,0 +1,119 @@
+# KÌ THI CHỌN HỌC SINH GIỎI CẤP CỤM TRƯỜNG THPT NĂM HỌC 2016-2017
+
+**Môn thi:** Tin học - Lớp 11    
+**Ngày thi:** 01/03/2017    
+**Thời gian làm bài:** 150 phút
+
+## Tổng quan bài thi
+
+|  Câu  |  Điểm | Tệp dữ liệu | Tệp kết quả |
+| :---: | :---: | :---------: | :---------: |
+|   1   |   5   |   CAU1.INP  |   CAU1.OUT  |
+|   2   |   5   |   CAU2.INP  |   CAU2.OUT  |
+|   3   |   5   |   CAU3.INP  |   CAU3.OUT  |
+|   4   |   5   |   CAU4.INP  |   CAU4.OUT  |
+
+## Câu 1: Ước số
+
+Cho trước số nguyên dương n.
+
+### Yêu cầu
+
+Tìm số lượng các ước nguyên dương của n.
+
+### Dữ liệu
+
+Số nguyên dương n ≤ 10<sup>9</sup>.
+
+### Kết quả
+
+Số lượng các ước nguyên dương của n tìm được.
+
+### Ví dụ
+
+| CAU1.INP | CAU1.OUT |                    Giải thích                    |
+| :------: | :------: | ------------------------------------------------ |
+|    12    |     6    | 12 có 6 ước nguyên dương là 1, 2, 3, 4, 6 và 12. |
+
+## Câu 2: Chi tiết máy
+
+Tại phân xưởng sản xuất chi tiết máy có tổng số nguyên liệu là s (đơn vị khối
+lượng). Quy trình sản xuất chi tiết máy được thực hiện như sau:
+
+1. Từ nguyên liệu, người ta tạo ra các phôi, mỗi phôi có khối lượng là k (đơn
+   vị khối lượng);
+2. Từ mỗi phôi, người ta tạo ra *các* chi tiết máy, mỗi chi tiết có khối lượng
+   m (đơn vị khối lượng).
+
+Sau đó phần nguyên liệu dư khi sản xuất phôi và chi tiết máy sẽ được thu lại để
+tiếp tục sản xuất theo quy trình trên.
+
+### Yêu cầu
+
+Tìm số chi tiết máy nhiều nhất có thể sản xuất được,
+
+### Dữ liệu
+
+3 số nguyên dương s, k và m, mỗi số ≤ 10<sup>9</sup>.
+
+### Kết quả
+
+Số chi tiết máy nhiều nhất có thể sản xuất được.
+
+### Ví dụ
+
+| CAU2.INP | CAU2.OUT |                       Giải thích                     |
+| :------: | :------: | ---------------------------------------------------- |
+|  13 5 3  |     3    | 13 nguyên liệu tạo 2 phôi, sản xuất được 2 chi tiết. |
+|          |          | Dư 7 nguyên liệu, sản xuất thêm 1 chi tiết nữa.      |
+|          |          | Tổng cộng có 3 chi tiết được sản xuất.               |
+
+## Câu 3: Tích lớn nhất
+
+Cho trước n số nguyên bất kì a<sub>1</sub>, a<sub>2</sub>, …, a<sub>n</sub>.
+
+### Yêu cầu
+
+Tìm 2 số trong n số đã cho có tích lớn nhất.
+
+### Dữ liệu
+
+* Dòng đầu chứa số nguyên dương n, 2 ≤ n ≤ 10<sup>4</sup>;
+* Dòng sau chứa n số nguyên bất kì có giá trị tuyệt đối ≤ 10<sup>4</sup>.
+
+### Kết quả
+
+Tích hai số có giá trị lớn nhất.
+
+### Ví dụ
+
+|     CAU3.INP     | CAU3.OUT |                 Giải thích                |
+| ---------------- | :------: | ----------------------------------------- |
+| 4<br>-2 -7 -15 2 |    105   | Hai số -7 và -15 có tích lớn nhất là 105. |
+
+## Câu 4: Xâu đối xứng
+
+Xâu kí tự s gọi là xâu đối xứng nếu viết các kí tự của S theo thứ tự ngược lại
+ta nhận được chính xâu S.
+
+Cho trước xâu X gồm các chữ cái tiếng Anh in hoa.
+
+### Yêu cầu
+
+Tìm cách viết thêm ít kí tự nhất vào cuối xâu X để nhận được xâu đối xứng S.
+
+### Dữ liệu
+
+Xâu X có không quá 100 kí tự.
+
+### Kết quả
+
+* Dòng đầu ghi số kí tự ít nhất phải viết thêm vào cuối xâu X để nhận được xâu
+  đối xứng S.
+* Dòng thứ hai ghi xâu đối xứng S nhận được.
+
+### Ví dụ
+
+| CAU3.INP |  CAU3.OUT |                       Giải thích                      |
+| :------: | --------- | ----------------------------------------------------- |
+|    ABB   | 1<br>ABBA | Thêm `A` vào cuối xâu `ABB` được xâu đối xứng `ABBA`. |
diff --git a/11/Q-2017/cau1.scm b/11/Q-2017/cau1.scm
new file mode 100644
index 0000000..5e59c49
--- /dev/null
+++ b/11/Q-2017/cau1.scm
@@ -0,0 +1,8 @@
+(define (cau1 n i)
+  (cond ((> (* i i) n) 0)
+        ((= (* i i) n) 1)
+        ((= (remainder n i) 0) (+ (cau1 n (+ i 1)) 2))
+        (else (cau1 n (+ i 1)))))
+(with-input-from-file "CAU1.INP" (lambda ()
+  (with-output-to-file "CAU1.OUT" (lambda ()
+    (format #t "~a\n" (cau1 (read) 1))))))
diff --git a/11/Q-2017/cau2.scm b/11/Q-2017/cau2.scm
new file mode 100644
index 0000000..8a9b00f
--- /dev/null
+++ b/11/Q-2017/cau2.scm
@@ -0,0 +1,5 @@
+(define (cau2 s k m) (let* ((nk (quotient s k)) (nm (* (quotient k m) nk)))
+  (if (= nk 0) 0 (+ (cau2 (+ (remainder s k) (* (remainder k m) nk)) k m) nm))))
+(with-input-from-file "CAU2.INP" (lambda ()
+  (with-output-to-file "CAU2.OUT" (lambda ()
+    (format #t "~a\n" (cau2 (read) (read) (read)))))))
diff --git a/11/Q-2017/cau3.scm b/11/Q-2017/cau3.scm
new file mode 100644
index 0000000..31cd5c3
--- /dev/null
+++ b/11/Q-2017/cau3.scm
@@ -0,0 +1,7 @@
+(with-input-from-file "CAU3.INP" (lambda ()
+  (with-output-to-file "CAU3.OUT" (lambda ()
+    (define l (sort (let read-list ((n (read)))
+                      (if (= n 0) '() (cons (read) (read-list (- n 1))))) <))
+    (format #t "~a\n"
+      (max (* (list-ref l (- (length l) 1)) (list-ref l (- (length l) 2)))
+           (* (list-ref l 1) (list-ref l 0))))))))
diff --git a/11/Q-2017/cau4.scm b/11/Q-2017/cau4.scm
new file mode 100644
index 0000000..b9438f5
--- /dev/null
+++ b/11/Q-2017/cau4.scm
@@ -0,0 +1,11 @@
+(with-input-from-file "CAU4.INP" (lambda ()
+  (with-output-to-file "CAU4.OUT" (lambda ()
+    (define x (list->string (let read-string ((c (read-char)))
+      (if (or (eof-object? c) (char-ci=? c #\newline))
+          '()
+          (cons c (read-string (read-char)))))))
+    (let find-palin ((i 0))
+      (if ((lambda (s) (string-ci=? (string-reverse s) s))
+           (string-copy x i (string-length x)))
+          (format #t "~a\n~a~a\n" i x (string-reverse (string-copy x 0 i)))
+          (find-palin (+ i 1))))))))