Bỏ qua để đến nội dung

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 đề)


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àiFile mã nguồn (C++)File mã nguồn (Python)File dữ liệu vàoFile kết quả raBộ nhớĐiểm
Bài 1CBAI1.cppPBAI1.pyCBAI1.INP / PBAI1.INPCBAI1.OUT / PBAI1.OUT1024 MB5.0
Bài 2CBAI2.cppPBAI2.pyCBAI2.INP / PBAI2.INPCBAI2.OUT / PBAI2.OUT1024 MB5.0
Bài 3CBAI3.cppPBAI3.pyCBAI3.INP / PBAI3.INPCBAI3.OUT / PBAI3.OUT1024 MB6.0
Bài 4CBAI4.cppPBAI4.pyCBAI4.INP / PBAI4.INPCBAI4.OUT / PBAI4.OUT1024 MB6.0
Bài 5CBAI5.cppPBAI5.pyCBAI5.INP / PBAI5.INPCBAI5.OUT / PBAI5.OUT1024 MB8.0

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àoKết quả ra
1234010
-1
a12b3c6
cba

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.

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àoKết quả ra
6
2 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.

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àoKết quả ra
1 4 17
1 9 7 11
16
2 4 7
1 2 2 3
3 3 7 2
6
3 4 10
6 7 8 9
5 6 7 8
9 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.

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àoKết quả raGiải thích
10 4
ADBAACDABC
0 1 1 0
BACABCLầ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.

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àoKết quả raGiải thích
6
6 18 7 10 9 8
18 -1 10 -1 8 -1Số ướ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)