Đề thi chọn học sinh giỏi cấp trường môn Tin học lớp 8 năm học 2026 - 2027

Tin họcLớp 8CChia sẻ bởi [email protected] 0 lượt sử dụng đề

UBND XÃ/PHƯỜNG …

TRƯỜNG THCS …

Đề chính thức

KỲ THI CHỌN HỌC SINH GIỎI CẤP TRƯỜNG

NĂM HỌC 2026 – 2027

Môn: Tin học – Lớp 8

Thời gian làm bài: 120 phút (không kể thời gian giao đề)

TỔNG QUAN ĐỀ THI

Bài

Tên bài

Tệp chương trình

Tệp dữ liệu vào

Tệp kết quả ra

Điểm

1

Cân bằng phân tử

MOLECULE.*

MOLECULE.INP

MOLECULE.OUT

4,0

2

Nén tín hiệu sinh thái

ECOSONG.*

ECOSONG.INP

ECOSONG.OUT

4,0

3

Đoạn cân bằng đối xứng

BALANCE.*

BALANCE.INP

BALANCE.OUT

4,0

4

Bức tường ánh sáng

LIGHTWALL.*

LIGHTWALL.INP

LIGHTWALL.OUT

4,0

5

Tập hợp tương khắc

CONFLICT.*

CONFLICT.INP

CONFLICT.OUT

4,0

Dấu `` trong tên tệp được thay thế bằng đuôi `PAS`, `CPP` hoặc `PY` tùy thuộc vào ngôn ngữ lập trình thí sinh sử dụng (Pascal, C++ hoặc Python).*

BÀI 1. CÂN BẰNG PHÂN TỬ (4,0 điểm)

Tên tệp chương trình: `MOLECULE.PAS` hoặc `MOLECULE.CPP` hoặc `MOLECULE.PY`

Trong một trung tâm nghiên cứu công nghệ sinh học, các chuỗi liên kết vi sinh được gán mã định danh là các số nguyên dương. Một mã định danh NN được các nhà khoa học gọi là mã hài hòa nếu thỏa mãn tính chất: Khi lấy tích của tất cả các chữ số khác 00 trừ đi tổng các chữ số của NN, kết quả thu được bằng đúng số lượng chữ số của NN.

Yêu cầu: Cho trước số nguyên dương NN. Hãy kiểm tra xem NN có phải là mã hài hòa hay không. Nếu không phải, hãy tìm số nguyên dương MM nhỏ nhất thỏa mãn M>NM > N sao cho MM là một mã hài hòa.

Dữ liệu vào (MOLECULE.INP)

- Gồm một dòng duy nhất chứa số nguyên dương NN (1≤N≤1061 \le N \le 10^6).

Kết quả ra (MOLECULE.OUT)

- Dòng 1: Ghi `YES` nếu NN là mã hài hòa; ngược lại ghi `NO`.
- Dòng 2: Nếu dòng 1 là `NO`, ghi ra số nguyên dương MM tìm được. (Nếu dòng 1 là `YES` thì không in dòng 2).

Giới hạn (Subtasks)

- Subtask 1 (50% số điểm): 1≤N≤1031 \le N \le 10^3.
- Subtask 2 (50% số điểm): 103<N≤10610^3 < N \le 10^6.

Ví dụ

MOLECULE.INP

MOLECULE.OUT

Giải thích

`24`

`YES`

Số 2424 có 2 chữ số. Tích các chữ số khác 0 là 2×4=82 \times 4 = 8. Tổng các chữ số là 2+4=62 + 4 = 6. Hiệu: 8−6=28 - 6 = 2 (bằng đúng số lượng chữ số). Do đó 2424 là mã hài hòa.

`23`

`NO`
`24`

Số 2323 có tích 2×3=62 \times 3 = 6, tổng 2+3=52 + 3 = 5, hiệu 6−5=1≠26 - 5 = 1 \ne 2 nên in `NO`. Số hài hòa nhỏ nhất lớn hơn 2323 là 2424.

BÀI 2. NÉN TÍN HIỆU SINH THÁI (4,0 điểm)

Tên tệp chương trình: `ECOSONG.PAS` hoặc `ECOSONG.CPP` hoặc `ECOSONG.PY`

Một thiết bị cảm biến ghi âm tiếng chim trong rừng nguyên sinh gửi tín hiệu về trạm quan sát dưới dạng một xâu ký tự. Tín hiệu gốc chỉ bao gồm các chữ cái in hoa (`A` đến `Z`). Để tiết kiệm băng thông truyền tin, thiết bị áp dụng quy tắc nén và truyền dẫn như sau:
- Ký tự gạch dưới `_` là ký tự nhiễu đường truyền phát sinh ngẫu nhiên, cần phải loại bỏ hoàn toàn.
- Một đoạn nén có dạng `(kX)`, trong đó kk là một số nguyên dương và XX là một chữ cái in hoa, biểu thị cho việc chữ cái XX xuất hiện liên tiếp đúng kk lần. Ví dụ: `(3C)` tương đương với `CCC`.
- Các chữ cái in hoa đứng độc lập ngoài ngoặc biểu thị chính nó (xuất hiện đúng 1 lần).

Yêu cầu: Cho xâu ký tự nén nhận được từ cảm biến. Hãy:
1. Giải mã và khôi phục lại chuỗi tín hiệu gốc hoàn chỉnh (sau khi loại bỏ nhiễu `_` và bung các đoạn nén).
2. Tìm chữ cái in hoa xuất hiện nhiều lần nhất trong chuỗi tín hiệu gốc và số lần xuất hiện của nó. Nếu có nhiều chữ cái có cùng số lần xuất hiện nhiều nhất, chọn chữ cái có thứ tự từ điển nhỏ nhất.

Dữ liệu vào (ECOSONG.INP)

- Gồm một dòng duy nhất chứa xâu ký tự SS có độ dài không quá 10510^5.
- Dữ liệu đảm bảo cấu trúc các cụm `(kX)` luôn hợp lệ, 1≤k≤10001 \le k \le 1000 và tổng độ dài xâu sau khi giải nén không vượt quá 10610^6.

Kết quả ra (ECOSONG.OUT)

- Dòng 1: Ghi xâu ký tự gốc sau khi giải nén.
- Dòng 2: Ghi chữ cái xuất hiện nhiều nhất cùng số lần xuất hiện của nó, cách nhau một dấu cách.

Giới hạn (Subtasks)

- Subtask 1 (40% số điểm): Xâu SS chỉ chứa chữ cái in hoa và ký tự `_` (không chứa dấu ngoặc).
- Subtask 2 (30% số điểm): Xâu SS có chứa đoạn nén `(kX)` với k≤9k \le 9.
- Subtask 3 (30% số điểm): Xâu SS thỏa mãn đầy đủ ràng buộc với k≤1000k \le 1000.

Ví dụ

ECOSONG.INP

ECOSONG.OUT

Giải thích

`A_B(3C)__D(4A)`

`ABCCCDAAAA`
`A 5`

Loại bỏ `_` thu được `AB(3C)D(4A)`. Bung nén được xâu `ABCCCDAAAA`. Trong xâu gốc: `A` xuất hiện 5 lần, `B` 1 lần, `C` 3 lần, `D` 1 lần. Chữ cái xuất hiện nhiều nhất là `A` với 5 lần.

BÀI 3. ĐOẠN CÂN BẰNG ĐỐI XỨNG (4,0 điểm)

Tên tệp chương trình: `BALANCE.PAS` hoặc `BALANCE.CPP` hoặc `BALANCE.PY`

Một dãy đo địa chấn gồm NN số nguyên A1,A2,…,ANA_1, A_2, \dots, A_N được ghi nhận theo thời gian thực. Một đoạn con liên tiếp gồm các phần tử từ chỉ số ii đến chỉ số jj (1≤i≤j≤N1 \le i \le j \le N) được gọi là đoạn cân bằng đối xứng nếu thỏa mãn hai điều kiện:
1. Số lượng phần tử của đoạn là một số chẵn: độ dài L=j−i+1=2kL = j - i + 1 = 2k với k≥1k \ge 1.
2. Tổng giá trị của kk phần tử đầu bằng tổng giá trị của kk phần tử sau:

∑p=ii+k−1Ap=∑p=i+kjAp\sum_{p=i}^{i+k-1} A_p = \sum_{p=i+k}^{j} A_p

Yêu cầu: Cho dãy số AA. Hãy tìm độ dài lớn nhất của một đoạn con cân bằng đối xứng trong dãy. Nếu không có đoạn con nào thỏa mãn, in ra số `0`.

Dữ liệu vào (BALANCE.INP)

- Dòng 1: Ghi số nguyên dương NN (2≤N≤30002 \le N \le 3000).
- Dòng 2: Ghi NN số nguyên A1,A2,…,ANA_1, A_2, \dots, A_N (−106≤Ai≤106-10^6 \le A_i \le 10^6), mỗi số cách nhau một khoảng trắng.

Kết quả ra (BALANCE.OUT)

- Ghi một số nguyên duy nhất là độ dài lớn nhất của đoạn cân bằng đối xứng tìm được.

Giới hạn (Subtasks)

- Subtask 1 (50% số điểm): N≤200N \le 200.
- Subtask 2 (50% số điểm): 200<N≤3000200 < N \le 3000.

Ví dụ

BALANCE.INP

BALANCE.OUT

Giải thích

`6`
`1 3 2 4 1 1`

`6`

Toàn bộ dãy có độ dài 6 (chẵn với k=3k=3). Nửa đầu gồm các phần tử {1,3,2}\{1, 3, 2\} có tổng là 6; nửa sau gồm {4,1,1}\{4, 1, 1\} có tổng là 6. Vì 6=66 = 6 nên đoạn này cân bằng đối xứng và có độ dài 6.

`5`
`2 5 7 1 9`

`0`

Không có đoạn con có độ dài chẵn nào thỏa mãn tính chất cân bằng.

BÀI 4. BỨC TƯỜNG ÁNH SÁNG (4,0 điểm)

Tên tệp chương trình: `LIGHTWALL.PAS` hoặc `LIGHTWALL.CPP` hoặc `LIGHTWALL.PY`

Một bảng đèn LED ma trận kích thước M×NM \times N gồm các bóng đèn đặt tại các ô (i,j)(i, j) (1≤i≤M,1≤j≤N1 \le i \le M, 1 \le j \le N). Bóng đèn tại ô (i,j)(i, j) có cường độ chiếu sáng ban đầu là Ai,jA_{i,j}.

Để kiểm tra độ tương phản, kỹ sư đặt một khung cảm biến chữ thập tâm (i,j)(i, j) vào một ô không nằm trên viền của bảng (2≤i≤M−12 \le i \le M-1 và 2≤j≤N−12 \le j \le N-1). Khung chữ thập này sẽ bao quát ô tâm (i,j)(i, j) và đúng 4 ô lân cận kề cạnh: trên (i−1,j)(i-1, j), dưới (i+1,j)(i+1, j), trái (i,j−1)(i, j-1), phải (i,j+1)(i, j+1).
- Độ biến thiên tương phản tại tâm (i,j)(i, j), ký hiệu là D(i,j)D(i, j), được tính bằng tổng độ chênh lệch tuyệt đối giữa cường độ của ô tâm với 4 ô lân cận:

D(i,j)=∣Ai,j−Ai−1,j∣+∣Ai,j−Ai+1,j∣+∣Ai,j−Ai,j−1∣+∣Ai,j−Ai,j+1∣D(i, j) = |A_{i,j} - A_{i-1,j}| + |A_{i,j} - A_{i+1,j}| + |A_{i,j} - A_{i,j-1}| + |A_{i,j} - A_{i,j+1}|

- Một ô (i,j)(i, j) (không nằm trên viền) được gọi là đỉnh sáng cục bộ nếu cường độ của nó lớn hơn nghiêm ngặt cường độ của cả 4 ô lân cận kề cạnh.

Yêu cầu:
1. Tìm vị trí ô tâm (i,j)(i, j) không nằm trên viền sao cho độ biến thiên tương phản D(i,j)D(i, j) đạt giá trị nhỏ nhất. Nếu có nhiều vị trí cùng đạt giá trị DD nhỏ nhất, chọn vị trí có chỉ số dòng ii nhỏ nhất; nếu vẫn trùng thì chọn vị trí có chỉ số cột jj nhỏ nhất.
2. Đếm số lượng các ô là đỉnh sáng cục bộ trên bảng đèn.

Dữ liệu vào (LIGHTWALL.INP)

- Dòng 1: Ghi hai số nguyên dương M,NM, N (3≤M,N≤10003 \le M, N \le 1000).
- MM dòng tiếp theo, mỗi dòng gồm NN số nguyên không âm thể hiện ma trận AA (0≤Ai,j≤1060 \le A_{i,j} \le 10^6).

Kết quả ra (LIGHTWALL.OUT)

- Dòng 1: Ghi ba số nguyên i,j,D(i,j)i, j, D(i, j) cách nhau một dấu cách tương ứng với tọa độ ô tâm và giá trị biến thiên nhỏ nhất tìm được ở yêu cầu 1.
- Dòng 2: Ghi một số nguyên là số lượng đỉnh sáng cục bộ tìm được ở yêu cầu 2.

Giới hạn (Subtasks)

- Subtask 1 (40% số điểm): M,N≤50M, N \le 50.
- Subtask 2 (60% số điểm): 50<M,N≤100050 < M, N \le 1000.

Ví dụ

LIGHTWALL.INP

LIGHTWALL.OUT

Giải thích

`3 4`
`1 5 2 3`
`4 8 3 7`
`2 6 1 4`

`2 3 12`
`1`

Có 2 ô không nằm trên viền là (2,2)(2, 2) và (2,3)(2, 3):
- Tại (2,2)(2, 2) có giá trị 8: D=∣8−5∣+∣8−6∣+∣8−4∣+∣8−3∣=3+2+4+5=14D = |8-5| + |8-6| + |8-4| + |8-3| = 3 + 2 + 4 + 5 = 14.
- Tại (2,3)(2, 3) có giá trị 3: D=∣3−2∣+∣3−1∣+∣3−8∣+∣3−7∣=1+2+5+4=12D = |3-2| + |3-1| + |3-8| + |3-7| = 1 + 2 + 5 + 4 = 12.
Giá trị DD nhỏ nhất là 12 tại ô (2,3)(2, 3).
Ô (2,2)(2, 2) có giá trị 8 lớn hơn cả 4 ô kề (5, 6, 4, 3) nên là đỉnh sáng cục bộ duy nhất (1 ô).

BÀI 5. TẬP HỢP TƯƠNG KHẮC (4,0 điểm)

Tên tệp chương trình: `CONFLICT.PAS` hoặc `CONFLICT.CPP` hoặc `CONFLICT.PY`

Trong một hệ thống mã hóa truyền thông, người ta thu thập được một dãy số nguyên dương gồm NN phần tử: A1,A2,…,ANA_1, A_2, \dots, A_N.

Hai phần tử tại hai vị trí khác nhau trong dãy được gọi là tương khắc nếu tích của chúng là một số chính phương (nghĩa là tồn tại số nguyên dương kk sao cho Ai×Aj=k2A_i \times A_j = k^2). Ví dụ: cặp số (2,8)(2, 8) tương khắc vì 2×8=16=422 \times 8 = 16 = 4^2; cặp số (12,27)(12, 27) tương khắc vì 12×27=324=18212 \times 27 = 324 = 18^2.

Hệ thống cần chọn ra một tập hợp gồm nhiều phần tử nhất từ dãy số ban đầu sao cho trong tập hợp được chọn không có bất kỳ hai phần tử nào tương khắc với nhau (tức là tích của hai phần tử bất kỳ được chọn đều không phải là số chính phương).

Yêu cầu: Hãy xác định số lượng phần tử lớn nhất của tập hợp thỏa mãn điều kiện trên.

Dữ liệu vào (CONFLICT.INP)

- Dòng 1: Ghi số nguyên dương NN (1≤N≤1051 \le N \le 10^5).
- Dòng 2: Ghi NN số nguyên dương A1,A2,…,ANA_1, A_2, \dots, A_N (1≤Ai≤1061 \le A_i \le 10^6), các số cách nhau một khoảng trắng.

Kết quả ra (CONFLICT.OUT)

- Ghi một số nguyên duy nhất là số lượng phần tử lớn nhất của tập hợp chọn được.

Giới hạn (Subtasks)

- Subtask 1 (30% số điểm): N≤100N \le 100 và Ai≤1000A_i \le 1000.
- Subtask 2 (30% số điểm): N≤2000N \le 2000 và Ai≤105A_i \le 10^5.
- Subtask 3 (40% số điểm): N≤105N \le 10^5 và Ai≤106A_i \le 10^6.

Ví dụ

CONFLICT.INP

CONFLICT.OUT

Giải thích

`7`
`2 3 6 8 12 18 27`

`3`

Ta có thể chọn tập hợp gồm 3 số: {2,3,6}\{2, 3, 6\}.
Các tích đôi một:
- 2×3=62 \times 3 = 6 (không chính phương)
- 2×6=122 \times 6 = 12 (không chính phương)
- 3×6=183 \times 6 = 18 (không chính phương)
Không thể chọn được tập hợp nào có từ 4 số trở lên mà không chứa cặp tương khắc.

--------- HẾT ---------

Cán bộ coi thi không giải thích gì thêm.

Họ và tên thí sinh: ................................................ Số báo danh: ........................

Xem tất cả