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

Chọn đội tuyển HSG quốc gia Sơn La 2025-2026

SỞ GD&ĐT TỈNH SƠN LA ĐỀ CHÍNH THỨC
(Ngày 1: 02 trang, ngày 2: 03 trang)

KỲ THI CHỌN ĐỘI TUYỂN HỌC SINH GIỎI QUỐC GIA Năm học 2025 - 2026
Môn thi: Tin học - Ngày thi: 13/9/2025 và 14/9/2025
Thời gian làm bài: 180 phút mỗi ngày (không kể thời gian phát đề)


BàiTên bàiFile mã nguồnNhậpXuấtĐiểm
Bài 1Số may mắnLUCKYID.*LUCKYID.INPLUCKYID.OUT7,0
Bài 2Rút gọn tênRENAME.*RENAME.INPRENAME.OUT7,0
Bài 3Những người nổi tiếngFAMOS.*FAMOS.INPFAMOS.OUT6,0

Phần mở rộng * là: .cpp, .c hay .py đối với ngôn ngữ lập trình C++, C hay Python tương ứng.

Tại một quốc gia nọ, người ta quan niệm số may mắn là những số chỉ có các chữ số thuộc tập “6, 8”. Ví dụ các số 6, 8, 66, 668, 888 là những số may mắn, còn các số 678, 80, 608 thì không phải số may mắn.

Yêu cầu: Với n cho trước, hãy đếm số lượng số may mắn có không quá n chữ số.

Dữ liệu: Nhập từ tệp văn bản LUCKYID.INP gồm một số nguyên dương n (1 ≤ n ≤ 1018).

Kết quả: Ghi ra tệp văn bản LUCKYID.OUT một số nguyên duy nhất là số lượng số may mắn có không quá n chữ số. Do số lượng này có thể rất lớn nên chỉ ghi ra phần dư khi chia cho 109 + 7.

Ví dụ:

LUCKYID.INPLUCKYID.OUTGiải thích
26Có 6 số may mắn là 6, 8, 66, 68, 86, 88.
562

Giới hạn:

  • Subtask #1: 50% số điểm của bài có 1 ≤ n ≤ 60;
  • Subtask #2: 30% số điểm tiếp theo có 61 ≤ n ≤ 106;
  • Subtask #3: 20% số điểm còn lại không có ràng buộc bổ sung.

Tại một thời điểm trong tương lai, người ta nhận thấy việc đặt tên “dư thừa dữ liệu” khiến cho việc lưu trữ rất tốn kém. Một tên được cho là “dư thừa dữ liệu” nếu có tiền tố của nó xuất hiện bên trong nó (mà không phải vị trí đầu tiên). Ví dụ “abcabd” là tên dư thừa dữ liệu còn “cba” thì không. Với mỗi tên là một chuỗi ký tự s, người ta tiến hành “rút gọn” để trở thành tên không dư thừa dữ liệu theo quy tắc sau:

Ta tìm tiền tố dài nhất của s xuất hiện trong s (không phải vị trí đầu tiên), nếu tìm thấy thì sẽ xóa toàn bộ tiền tố đó, quá trình này lặp lại cho tới khi không còn tiền tố nào của s xuất hiện trong s (trừ vị trí đầu tiên).

Ví dụ: “abaabcba” → “aabcba” → “abcba” → “bcba” → “cba”.

Yêu cầu: Bạn được cho một tên là một chuỗi kí tự s khác rỗng, chỉ gồm các kí tự la-tin in thường, hãy rút gọn s để được tên không dư thừa dữ liệu.

Dữ liệu: Nhập từ tệp văn bản RENAME.INP gồm một dòng duy nhất chứa chuỗi kí tự s, khác rỗng, chỉ gồm các kí tự la-tin thường, độ dài không quá 106.

Kết quả: Ghi ra tệp văn bản RENAME.OUT một dòng duy nhất chứa chuỗi kết quả.

Ví dụ:

RENAME.INPRENAME.OUTGiải thích
abcabcabcabcabc → abc
abaabcbacbaabaabcba → aabcba → abcba → bcba → cba

Giới hạn:

  • Subtask 1: 50% số điểm của bài có |s| ≤ 500;
  • Subtask 2: 30% số điểm khác có |s| ≤ 5000;
  • Subtask 3: 20% số điểm còn lại không có ràng buộc bổ sung.

Bài 3. Những người nổi tiếng (6,0 điểm)

Phần tiêu đề “Bài 3. Những người nổi tiếng (6,0 điểm)”

Tí có một bộ sưu tập poster của những nhân vật nổi tiếng, mỗi nhân vật nổi tiếng được Tí đặt biệt danh là một số nguyên dương. Bộ sưu tập này có n tấm poster, trong đó, nhân vật nổi tiếng trên tấm poster thứ i có biệt danh là ai. Thật không may, không phải tất cả những nhân vật nổi tiếng Tí đều yêu thích. Cụ thể, Tí chỉ yêu thích đúng m nhân vật nổi tiếng, đó là những người mà Tí đặt biệt danh là các số nguyên từ 1 đến m, những người còn lại thì Tí không yêu thích.

Gọi Pmin là số lượng poster của nhân vật có ít poster nhất trong m nhân vật Tí yêu thích, Tí có thể đổi những tấm poster của nhân vật mình không yêu thích lấy những tấm poster của nhân vật mình yêu thích để làm tăng giá trị Pmin với số lần đổi tùy ý.

Yêu cầu: Hãy tính Pmin lớn nhất và số lần đổi poster ít nhất để đạt được giá trị Pmin này.

Dữ liệu: Nhập từ tệp văn bản FAMOS.INP có cấu trúc như sau:

  • Dòng đầu chứa hai số nguyên dương n, m là số tấm poster trong bộ sưu tập của Tí và số nhân vật nổi tiếng Tí yêu thích (1 ≤ m ≤ n ≤ 106);
  • Dòng thứ hai chứa n số nguyên dương a1, a2, …, an là biệt danh của các nhân vật nổi tiếng trên n tấm poster trong bộ sưu tập của Tí (1 ≤ ai ≤ 109, ∀i = 1..n).

Kết quả: Ghi ra tệp văn bản FAMOS.OUT một dòng chứa hai số nguyên là số Pmin và số lần đổi poster ít nhất để đạt giá trị Pmin đó.

Ví dụ:

FAMOS.INPFAMOS.OUTGiải thích
5 2
1 2 100 2 2
2 1Tí đổi tấm poster số 3 thành poster của nhân vật số 1.
8 3
7 1 1 3 3 1 2 5
2 1Tí đổi tấm poster số 1 thành poster của nhân vật số 2. Pmin lớn nhất là 2 với số lần đổi ít nhất là 1.

Giới hạn:

  • Subtask #1: 60% số điểm của bài có 1 ≤ m ≤ n ≤ 1000;
  • Subtask #2: 40% số điểm còn lại không có ràng buộc bổ sung.
BàiTên bàiFile mã nguồnNhậpXuấtĐiểm
Bài 4Bể cá cảnhAQUARIUM.*AQUARIUM.INPAQUARIUM.OUT7,0
Bài 5Ánh sáng và hoaFLIGHT.*FLIGHT.INPFLIGHT.OUT7,0
Bài 6Tự động hóaAUTOMAT.*AUTOMAT.INPAUTOMAT.OUT6,0

Phần mở rộng * là: .cpp, .c hay .py đối với ngôn ngữ lập trình C++, C hay Python tương ứng.

Tí có một khối san hô mà mặt đáy được chia thành m × n ô vuông đơn vị (m hàng, n cột). Trên ô vuông ở hàng i cột j có cột san hô với chiều cao là một số nguyên hij. Tí sử dụng khối san hô này để thiết kế bể cá cảnh.

Khối san hô gồm các cột lập phương cao thấp khác nhau, bao quanh bởi bốn tấm kính tạo thành bể cá

Tí chọn một số nguyên dương H rồi cắt 4 tấm kính hình chữ nhật (2 tấm có kích thước m × H và 2 tấm có kích thước n × H) để ghép bốn xung quanh khối san hô tạo thành bể cá có chiều cao H. Với bể cá này, khi đổ nước vào, mực nước cao tối đa là H. Những ô có hij ≥ H, thể tích nước bên trên nó bằng 0, những ô có hij < H, thể tích nước bên trên nó tối đa là H − hij. Như vậy, tổng thể tích nước tối đa của bể là:

V(H) = tổng của max(H − hij, 0) với mọi i = 1..m, j = 1..n.

Yêu cầu: Cho trước số nguyên dương X, hãy tìm chiều cao tối thiểu H để V(H) ≥ X.

Dữ liệu: Nhập từ tệp văn bản AQUARIUM.INP có cấu trúc như sau:

  • Dòng đầu chứa ba số nguyên m, n, X (1 ≤ m, n ≤ 106, m × n ≤ 106, 1 ≤ X ≤ 1018);
  • Dòng thứ i trong m dòng tiếp theo chứa n số nguyên hi1, hi2, …, hin (1 ≤ hij ≤ 109).

Kết quả: Ghi ra tệp văn bản AQUARIUM.OUT một số nguyên H nhỏ nhất mà V(H) ≥ X.

Ví dụ:

AQUARIUM.INPAQUARIUM.OUTGiải thích
2 3 10
1 4 6
2 1 3
5Với H = 4 sẽ có V(4) = 9.
Với H = 5 sẽ có V(5) = 14.
Vậy số H nhỏ nhất là 5.

Giới hạn:

  • Subtask #1: 50% số điểm của bài có 1 ≤ m, n ≤ 100, hij ≤ 1000, X ≤ 106;
  • Subtask #2: 30% số điểm tiếp theo có 1 ≤ m, n ≤ 1000, hij ≤ 106, X ≤ 109;
  • Subtask #3: 20% số điểm còn lại không có ràng buộc bổ sung.

Theo kế hoạch kỷ niệm 130 năm thành lập Tỉnh (1895-2025), Sơn La đang tiến hành trang trí đô thị bằng cách, dọc tuyến đường quốc lộ 6 lên Sơn La, công ty đô thị đề xuất n địa điểm trang trí, tại địa điểm thứ i sẽ trồng một bồn hoa với độ đẹp là bi và lắp đèn chiếu sáng với độ sáng li. Các địa điểm được đánh số từ 1 đến n.

Để tuyến đường được lung linh rực rỡ, tập thể lãnh đạo tỉnh muốn lựa chọn một danh sách các địa điểm (trong danh sách n địa điểm đã được đề xuất) sao cho với danh sách này thì độ sáng của các đèn chiếu sáng tăng dần và tổng độ đẹp của các bồn hoa là lớn nhất. Cụ thể, nếu ta chọn danh sách k địa điểm 1 ≤ i1 < i2 < … < ik ≤ n thì l(i1) < l(i2) < … < l(ik) và b(i1) + b(i2) + … + b(ik) đạt giá trị lớn nhất.

Yêu cầu: Hãy giúp lãnh đạo tỉnh lựa chọn được một danh sách địa điểm thỏa mãn điều kiện yêu cầu. Tính tổng độ đẹp của các bồn hoa trong danh sách được lựa chọn.

Dữ liệu: Nhập từ tệp văn bản FLIGHT.INP có cấu trúc như sau:

  • Dòng đầu chứa số nguyên dương n (1 ≤ n ≤ 2 × 105) là số vị trí được đề xuất;
  • Dòng thứ hai chứa n số nguyên b1, b2, …, bn (1 ≤ bi ≤ 109, ∀i = 1..n);
  • Dòng thứ ba chứa n số nguyên l1, l2, …, ln (1 ≤ li ≤ 109, ∀i = 1..n).

Kết quả: Ghi ra tệp văn bản FLIGHT.OUT một dòng duy nhất chứa số nguyên là tổng độ đẹp của các bồn hoa trong danh sách được lựa chọn thỏa mãn điều kiện yêu cầu.

Ví dụ:

FLIGHT.INPFLIGHT.OUTGiải thích
5
1 1 1 1 2
1 3 2 5 4
4Danh sách các vị trí tối ưu là 1, 2, 5 (hoặc 1, 3, 5). Tổng độ đẹp của các bồn hoa là 4 (lớn nhất).
3
3 1 1
3 1 2
3Danh sách các vị trí tối ưu là 1. Tổng độ đẹp của các bồn hoa là 3 (nếu ta chọn danh sách địa điểm 2, 3 thì chỉ đạt được tổng độ đẹp các bồn hoa là 2).

Giới hạn:

  • Subtask #1: 50% số điểm của bài có 1 ≤ n ≤ 2000;
  • Subtask #2: 30% số điểm khác có 1 ≤ li ≤ 106, ∀i = 1..n;
  • Subtask #3: 20% số điểm còn lại không có ràng buộc bổ sung.

Tí đang nghiên cứu phát triển một dây chuyền sản xuất điều khiển tự động bởi Robot. Dây chuyền gồm n máy xếp thành một hàng đánh số từ 1 đến n. Tại một thời điểm, mỗi máy có thể thực hiện một tác vụ độc lập trong K tác vụ và được ký hiệu bởi các số nguyên dương từ 0 đến K − 1, ta gọi đó là trạng thái của máy. Dãy trạng thái ban đầu của các máy là t1, t2, …, tn (0 ≤ ti < K, ∀i = 1..n).

Robot điều khiển dây chuyền thông qua các lệnh. Mỗi lệnh là một bộ bốn số nguyên l, r, x, y (1 ≤ l ≤ r ≤ n, 0 ≤ x, y < K) sẽ tác động lên các máy đang ở trạng thái x trong các máy có chỉ số từ l đến r, các máy này đồng loạt đổi sang trạng thái y, các máy khác không thay đổi. Robot đã điều khiển dây chuyền bằng q lệnh.

Yêu cầu: Cho biết trạng thái ban đầu của các máy và danh sách q lệnh của Robot, hãy xác định trạng thái cuối cùng của các máy sau q lệnh kể trên.

Dữ liệu: Nhập từ tệp văn bản AUTOMAT.INP có cấu trúc như sau:

  • Dòng đầu chứa ba số nguyên dương n, K, q là số máy trong dây chuyền, số trạng thái và số lệnh điều khiển (1 ≤ n, q ≤ 2 × 105; 2 ≤ K ≤ 20);
  • Dòng thứ hai chứa n số nguyên t1, t2, …, tn là trạng thái ban đầu của các máy theo đúng thứ tự (0 ≤ ti < K, ∀i = 1..n);
  • q dòng tiếp theo, mỗi dòng chứa bốn số nguyên l, r, x, y (1 ≤ l ≤ r ≤ n, 0 ≤ x, y < K) mô tả một lệnh điều khiển. Các lệnh điều khiển được thực thi theo đúng thứ tự.

Kết quả: Ghi ra tệp văn bản AUTOMAT.OUT một dòng chứa n số nguyên là dãy trạng thái cuối cùng của các máy sau khi thực thi q lệnh của Robot.

Ví dụ:

AUTOMAT.INPAUTOMAT.OUTGiải thích
5 5 3
0 1 2 3 4
1 3 1 2
2 4 2 3
2 5 4 0
0 3 3 3 0Trạng thái các máy như sau:
0 1 2 3 4 (ban đầu)
0 2 2 3 4 (sau lệnh 1)
0 3 3 3 4 (sau lệnh 2)
0 3 3 3 0 (sau lệnh 3, trạng thái cuối cùng)
6 2 5
0 0 0 0 0 0
1 4 1 0
1 6 0 0
2 5 0 1
1 6 1 0
1 6 0 1
1 1 1 1 1 1Trạng thái các máy như sau:
0 0 0 0 0 0 (ban đầu)
0 0 0 0 0 0 (sau lệnh 1)
0 0 0 0 0 0 (sau lệnh 2)
0 1 1 1 1 0 (sau lệnh 3)
0 0 0 0 0 0 (sau lệnh 4)
1 1 1 1 1 1 (sau lệnh 5, trạng thái cuối cùng)

Giới hạn:

  • Subtask #1: 40% số điểm của bài có 1 ≤ n, q ≤ 5000;
  • Subtask #2: 20% số điểm khác có K = 2;
  • Subtask #3: 40% số điểm còn lại không có ràng buộc bổ sung.

Thí sinh không sử dụng tài liệu. Cán bộ coi thi không giải thích gì thêm.