HSG THPT Hải Phòng 2025-2026
SỞ GIÁO DỤC VÀ ĐÀO TẠO
THÀNH PHỐ HẢI PHÒNG
ĐỀ CHÍNH THỨC
(Đề thi gồm 05 bài; 04 trang)
KỲ THI CHỌN HỌC SINH GIỎI THÀNH PHỐ
Cấp THPT năm học 2025 - 2026
Môn thi: Tin học - Ngày thi: 11/12/2025
Thời gian làm bài: 180 phút (không kể thời gian phát đề)
Tổng quan bài thi
Phần tiêu đề “Tổng quan bài thi”Học sinh làm bài trên máy tính, viết chương trình theo yêu cầu của các bài toán.
| Bài | File mã nguồn (C++) | File mã nguồn (Python) | File dữ liệu vào | File kết quả ra | Bộ nhớ | Điểm |
|---|---|---|---|---|---|---|
| Bài 1 | CBAI1.cpp | PBAI1.py | CBAI1.INP / PBAI1.INP | CBAI1.OUT / PBAI1.OUT | 1024 MB | 5.0 |
| Bài 2 | CBAI2.cpp | PBAI2.py | CBAI2.INP / PBAI2.INP | CBAI2.OUT / PBAI2.OUT | 1024 MB | 5.0 |
| Bài 3 | CBAI3.cpp | PBAI3.py | CBAI3.INP / PBAI3.INP | CBAI3.OUT / PBAI3.OUT | 1024 MB | 6.0 |
| Bài 4 | CBAI4.cpp | PBAI4.py | CBAI4.INP / PBAI4.INP | CBAI4.OUT / PBAI4.OUT | 1024 MB | 6.0 |
| Bài 5 | CBAI5.cpp | PBAI5.py | CBAI5.INP / PBAI5.INP | CBAI5.OUT / PBAI5.OUT | 1024 MB | 8.0 |
Bài 1. Xâu đảo ngược
Phần tiêu đề “Bài 1. Xâu đảo ngược”Cho xâu kí tự chỉ gồm các chữ cái Latin viết in thường ‘a’ … ‘z’ và chữ số ‘0’ … ‘9’. Biết rằng xâu đảo ngược của một xâu là chuỗi các kí tự của xâu gốc nhưng viết theo thứ tự ngược lại từ phải qua trái, ví dụ xâu đảo ngược của xâu ‘abcd’ là ‘dcba’.
Yêu cầu: Tính tổng các chữ số có trong xâu kí tự và in ra xâu đảo ngược của xâu đã cho nhưng không bao gồm các kí tự chữ số.
Dữ liệu: Vào từ file văn bản chứa một xâu kí tự có độ dài không quá 10⁵.
Kết quả: Ghi ra file kết quả thông tin sau:
- Dòng đầu tiên là tổng các chữ số có trong xâu kí tự;
- Dòng thứ hai là xâu đảo ngược của xâu đã cho không bao gồm các kí tự chữ số. Nếu không tồn tại xâu đảo ngược thì ghi ra −1.
Ví dụ:
| Dữ liệu vào | Kết quả ra |
|---|---|
12340 | 10-1 |
a12b3c | 6cba |
Chấm điểm:
- Subtask 1 (50% số điểm): Xâu chỉ có kí tự chữ số ‘0’ … ‘9’.
- Subtask 2 (50% số điểm): Không có ràng buộc nào thêm.
Bài 2. Số nguyên tố đặc biệt
Phần tiêu đề “Bài 2. Số nguyên tố đặc biệt”Số P được gọi là nguyên tố đặc biệt nếu P là số nguyên tố và tổng các chữ số của nó cũng là số
nguyên tố. Ví dụ: 2, 3, 23, 29 là các số nguyên tố đặc biệt. Cho dãy A có n số nguyên dương
{a₁, a₂, …, aₙ}.
Yêu cầu: Đếm số lượng số nguyên tố đặc biệt trong dãy A.
Dữ liệu: Vào từ file văn bản có thông tin sau:
- Dòng đầu tiên là số nguyên dương n (n ≤ 10⁶);
- Dòng thứ hai có n số nguyên dương a₁, a₂, …, aₙ (aᵢ ≤ 10⁶).
Các số trên cùng một dòng trong file dữ liệu được viết cách nhau bởi dấu cách trống.
Kết quả: Ghi ra file kết quả một số duy nhất là số lượng các số nguyên tố đặc biệt.
Ví dụ:
| Dữ liệu vào | Kết quả ra |
|---|---|
62 3 19 23 29 17 | 4 |
Chấm điểm:
- Subtask 1 (30% số điểm): Dữ liệu vào có n ≤ 10².
- Subtask 2 (40% số điểm): Dữ liệu vào có n ≤ 10⁴.
- Subtask 3 (30% số điểm): Không có ràng buộc nào thêm.
Bài 3. Tìm cặp số
Phần tiêu đề “Bài 3. Tìm cặp số”Cho số nguyên dương S và ma trận A có m hàng, n cột. Ô giao giữa hàng i (i = 1..m) và cột j (j = 1..n) có số nguyên dương aᵢⱼ (aᵢⱼ ≤ 10⁹).
Yêu cầu: Tìm tổng lớn nhất của 2 phần tử ở 2 vị trí khác nhau trong ma trận A sao cho tổng này không lớn hơn số nguyên dương S.
Dữ liệu: Vào từ file văn bản có thông tin sau:
- Dòng đầu tiên có 3 số nguyên dương m, n, S (m, n ≤ 10³; S ≤ 2 × 10⁹);
- m dòng tiếp theo, mỗi dòng có n số nguyên dương không vượt quá 10⁹.
Các số trên cùng một dòng trong file dữ liệu được viết cách nhau bởi dấu cách trống.
Kết quả: Ghi ra file kết quả một dòng là tổng lớn nhất tìm được theo yêu cầu. Nếu không tìm được 2 phần tử theo yêu cầu thì in ra −1.
Ví dụ:
| Dữ liệu vào | Kết quả ra |
|---|---|
1 4 171 9 7 11 | 16 |
2 4 71 2 2 33 3 7 2 | 6 |
3 4 106 7 8 95 6 7 89 8 8 7 | -1 |
Chấm điểm:
- Subtask 1 (20% số điểm): Dữ liệu vào có m = 1.
- Subtask 2 (30% số điểm): Dữ liệu vào có m, n ≤ 10².
- Subtask 3 (50% số điểm): Không có ràng buộc nào thêm.
Bài 4. Xóa xâu
Phần tiêu đề “Bài 4. Xóa xâu”Cho xâu kí tự S có n kí tự chữ cái Latin viết in hoa ‘A’..’Z’. Có q lệnh xóa kí tự, mỗi lệnh xóa thuộc một trong 2 loại sau đây:
- Loại 0: Xóa 1 kí tự đầu tiên (tính từ trái qua phải) có thứ tự từ điển nhỏ nhất của xâu còn lại.
- Loại 1: Xóa 1 kí tự đầu tiên (tính từ trái qua phải) có thứ tự từ điển lớn nhất của xâu còn lại.
Yêu cầu: Tìm xâu kí tự còn lại sau khi thực hiện tuần tự q lệnh xóa.
Dữ liệu: Vào từ file văn bản có thông tin sau:
- Dòng đầu tiên có 2 số nguyên dương n, q (n ≤ 2 × 10⁵; q ≤ 10⁵);
- Dòng thứ hai là xâu kí tự S chỉ có kí tự chữ cái Latin viết in hoa ‘A’..’Z’;
- Dòng thứ ba có q số, mỗi số là số 0 hoặc số 1 tương ứng thể hiện loại lệnh xóa.
Các số trên cùng một dòng trong file dữ liệu được viết cách nhau bởi dấu cách trống.
Kết quả: Ghi ra file kết quả xâu kí tự còn lại sau khi thực hiện tuần tự q lệnh xóa.
Ví dụ:
| Dữ liệu vào | Kết quả ra | Giải thích |
|---|---|---|
10 4ADBAACDABC0 1 1 0 | BACABC | Lần 1 - ADBAACDABC → DBAACDABC Lần 2 - DBAACDABC → BAACDABC Lần 3 - BAACDABC → BAACABC Lần 4 - BAACABC → BACABC |
Chấm điểm:
- Subtask 1 (10% số điểm): Dữ liệu vào có q = 1.
- Subtask 2 (40% số điểm): Dữ liệu vào có n ≤ 10⁴; q ≤ 10³.
- Subtask 3 (50% số điểm): Không có ràng buộc nào thêm.
Bài 5. Tìm kiếm
Phần tiêu đề “Bài 5. Tìm kiếm”Cho mảng A có n số nguyên dương {a₁, a₂, …, aₙ}.
Yêu cầu: Với mỗi số nguyên dương aᵢ, tìm số nguyên dương aⱼ (j > i) với j nhỏ nhất thỏa mãn aⱼ có nhiều ước hơn aᵢ; nếu không có số aⱼ thỏa mãn thì kết quả tìm kiếm là −1.
Dữ liệu: Vào từ file văn bản có thông tin sau:
- Dòng đầu tiên là số nguyên dương n (n ≤ 2 × 10⁵);
- Dòng thứ hai có n số nguyên dương a₁, a₂, …, aₙ (aᵢ ≤ 10⁹).
Dữ liệu đảm bảo: max{aᵢ} − min{aᵢ} ≤ 10⁶ ∀i = 1..n. Các số trên cùng một dòng trong file
dữ liệu được viết cách nhau bởi dấu cách trống.
Kết quả: Ghi ra file kết quả một dòng có n số nguyên theo thứ tự là kết quả tìm kiếm theo yêu cầu. Các số nguyên ghi cách nhau bởi một dấu cách trống.
Ví dụ:
| Dữ liệu vào | Kết quả ra | Giải thích |
|---|---|---|
66 18 7 10 9 8 | 18 -1 10 -1 8 -1 | Số ước tương ứng của các số là: 4 6 2 4 3 4 ⇒ Kết quả tìm kiếm là: • a₁ = 18 (vì 6 > 4) • a₂ = −1 (vì không có số lớn hơn 6) • a₃ = 10 (vì 4 > 2 và a₄ gần nhất) • a₄ = −1 (vì không có số lớn hơn 4) • a₅ = 8 (vì 4 > 3) • a₆ = −1 (vì không có số bên phải) |
Chấm điểm:
- Subtask 1 (20% số điểm): Dữ liệu vào có n ≤ 10³ và aᵢ ≤ 10⁴ ∀i = 1..n.
- Subtask 2 (50% số điểm): Dữ liệu vào có n > 10³ và aᵢ ≤ 10⁶ ∀i = 1..n.
- Subtask 3 (30% số điểm): Không có ràng buộc nào thêm.
(Thí sinh không sử dụng tài liệu, giám thị không giải thích gì thêm)