KỲ THI CHỌN ĐỘI TUYỂN HỌC SINH GIỎI
THAM DỰ KỲ THI QUỐC GIA NĂM HỌC 2027 – 2028
Đề đề xuất
(Đề thi có 04 trang)
HỘI ĐỒNG TUYỂN CHỌN ĐỘI TUYỂN QUỐC GIA
BÀI THI MÔN: TIN HỌC
Thời gian làm bài: 180 phút (không kể thời gian phát đề)
Tác giả đề xuất: Lâm Duy Khánh
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ả | Điểm | Giới hạn thời gian | Giới hạn bộ nhớ |
|---|---|---|---|---|---|---|---|
1 | Đoạn số siêu chính phương | `SPQRT.*` | `SPQRT.INP` | `SPQRT.OUT` | 6,0 | 1,0 giây | 512 MB |
2 | Virus máy tính | `VIRUS.*` | `VIRUS.INP` | `VIRUS.OUT` | 7,0 | 2,0 giây | 512 MB |
3 | Thao tác dãy số | `THAOTAC.*` | `THAOTAC.INP` | `THAOTAC.OUT` | 7,0 | 2,5 giây | 512 MB |
Dấu `*` trong tệp chương trình được thay thế bằng đuôi `cpp` hoặc `pas` tùy theo ngôn ngữ lập trình sử dụng (`C++` hoặc `Pascal`).
BÀI 1. ĐOẠN SỐ SIÊU CHÍNH PHƯƠNG (6,0 điểm)
Tên tệp chương trình: `SPQRT.*`
Tệp dữ liệu vào: `SPQRT.INP`
Tệp kết quả: `SPQRT.OUT`
Một số nguyên dương được gọi là số chính phương nếu là bình phương của một số nguyên ( với ). Trong số học, một số nguyên dương lớn hơn được gọi là số nguyên tố nếu nó chỉ có đúng hai ước nguyên dương là và chính nó.
Một số nguyên dương được gọi là số siêu chính phương nếu là bình phương của một số nguyên tố, nghĩa là tồn tại số nguyên tố sao cho:
Ví dụ: , , , là các số siêu chính phương; trong khi , , không phải là số siêu chính phương.
Cho một dãy số nguyên gồm phần tử ( có thể âm, dương hoặc bằng ). Một đoạn con liên tiếp () được gọi là đoạn siêu chính phương nếu tích của tất cả các phần tử trong đoạn:
là một số siêu chính phương.
Yêu cầu
1. Tìm độ dài lớn nhất của một đoạn con siêu chính phương trong dãy .
2. Đếm số lượng đoạn con có độ dài lớn nhất đó.
(Nếu trong dãy không tồn tại bất kỳ đoạn con siêu chính phương nào, quy ước cả hai giá trị cần tìm đều bằng ).
Dữ liệu vào
- Dòng đầu tiên chứa số nguyên dương () — số lượng phần tử của dãy số.
- Dòng thứ hai chứa số nguyên (), mỗi số cách nhau một khoảng trắng.
Kết quả ra
- Gồm hai số nguyên ghi trên một dòng (hoặc hai dòng):
- Giá trị thứ nhất là độ dài lớn nhất của đoạn con siêu chính phương tìm được.
- Giá trị thứ hai là số lượng đoạn con đạt độ dài lớn nhất đó.
Ví dụ
`SPQRT.INP` | `SPQRT.OUT` | Giải thích |
|---|---|---|
`6` | `5 1` | Đoạn con từ chỉ số đến là có tích là: |
`5` | `4 1` | Đoạn con dài nhất là có độ dài , tích là (là số siêu chính phương). Có duy nhất đoạn như vậy. |
Ràng buộc và Subtasks
- Subtask 1 (20% số điểm): ; .
- Subtask 2 (30% số điểm): ; .
- Subtask 3 (25% số điểm): ; với mọi .
- Subtask 4 (25% số điểm): ; .
BÀI 2. VIRUS MÁY TÍNH (7,0 điểm)
Tên tệp chương trình: `VIRUS.*`
Tệp dữ liệu vào: `VIRUS.INP`
Tệp kết quả: `VIRUS.OUT`
Hệ thống mạng máy tính của Sở Giáo dục và Đào tạo gồm máy tính được đánh số từ đến . Toàn bộ hệ thống liên kết theo cấu trúc đồ thị dạng cây có gốc tại máy chủ trung tâm quản trị là máy . Mỗi máy tính () được kết nối trực tiếp với máy tính quản lý cấp trên (máy cha) là .
Duy Khánh muốn tìm lại bài thi của mình đang được lưu trữ tại một máy tính nào đó trong hệ thống. Để làm điều này, Duy Khánh phát tán một mã độc (virus) có khả năng tự động lây nhiễm. Tuy nhiên, Sở GD&ĐT đã chủ động thiết lập các biện pháp an ninh mạng để ngăn chặn:
- Ban đầu, Sở đã kích hoạt chương trình phòng thủ tại một tập gồm máy tính . Khi một máy tính đang được bảo vệ, virus hoàn toàn không thể xâm nhập vào máy tính đó và cũng không thể lan truyền qua máy tính đó.
- Virus của Duy Khánh lây lan âm thầm theo các máy con hoặc lan tỏa cục bộ.
Hệ thống liên tục ghi nhận sự kiện/truy vấn diễn ra theo thứ tự thời gian, thuộc một trong bốn loại sau:
- Loại 1 (`1 v`): Duy Khánh tấn công vào máy .
- Nếu máy chưa có chương trình bảo vệ và chưa bị nhiễm virus: máy lập tức bị nhiễm virus.
- Nếu máy đã bị nhiễm virus từ trước: virus sẽ lập tức lan truyền xuống tất cả các máy con trực tiếp của (ngoại trừ các máy con đang có chương trình bảo vệ).
- Loại 2 (`2 u`): Sở GD&ĐT tăng cường an ninh, kích hoạt chương trình bảo vệ tại máy . Kể từ thời điểm này, máy được bảo vệ (nếu máy đã bị nhiễm virus trước đó thì virus tại bị phong tỏa, không thể phát tán đi tiếp).
- Loại 3 (`3 u`): Hệ thống cảnh báo tự động: chương trình bảo vệ tại máy được đẩy ngược lên máy cha trực tiếp của (tức máy ). Máy lập tức được kích hoạt bảo vệ.
- Loại 4 (`4 u`): Kiểm tra tình trạng dữ liệu: Giả sử bài thi của Duy Khánh đang nằm tại máy , hãy xác định xem máy hiện tại có đang bị virus xâm nhập hay không? In ra `YES` nếu máy đã bị nhiễm virus, ngược lại in ra `NO`.
Yêu cầu
Hãy viết chương trình mô phỏng quá trình lây lan của virus và phản hồi kết quả cho tất cả các truy vấn loại 4.
Dữ liệu vào
- Dòng đầu tiên chứa ba số nguyên dương () — số lượng máy tính, số lượng truy vấn và số lượng máy tính ban đầu có bảo vệ.
- Dòng thứ hai chứa số nguyên () mô tả máy cha của từng máy từ đến .
- Dòng thứ ba chứa số nguyên phân biệt () — danh sách các máy ban đầu được cài đặt chương trình bảo vệ.
- Trong dòng tiếp theo, mỗi dòng mô tả một sự kiện theo một trong các định dạng:
- `1 v`: Duy Khánh tấn công máy ().
- `2 u`: Cài đặt bảo vệ tại máy ().
- `3 u`: Đẩy tín hiệu bảo vệ lên máy cha của ().
- `4 u`: Kiểm tra trạng thái máy ().
Kết quả ra
- Với mỗi truy vấn loại 4, in ra trên một dòng xâu `YES` nếu máy tính đang bị virus xâm nhập, hoặc `NO` nếu máy tính an toàn.
Ví dụ
`VIRUS.INP` | `VIRUS.OUT` | Giải thích |
|---|---|---|
`5 6 1` | `YES` | Đồ thị cây gồm đỉnh: gốc , con của là , con của là . |
Ràng buộc và Subtasks
- Subtask 1 (15% số điểm): ; cây có dạng đường thẳng ().
- Subtask 2 (20% số điểm): ; không có truy vấn loại 2 và loại 3.
- Subtask 3 (25% số điểm): ; cây có độ cao không quá .
- Subtask 4 (40% số điểm): ; không có ràng buộc gì thêm.
BÀI 3. THAO TÁC DÃY SỐ (7,0 điểm)
Tên tệp chương trình: `THAOTAC.*`
Tệp dữ liệu vào: `THAOTAC.INP`
Tệp kết quả: `THAOTAC.OUT`
Cho một dãy số nguyên dương gồm phần tử. Bạn Minh cần thực hiện truy vấn, mỗi truy vấn được cho bởi một đoạn chỉ số ().
Với mỗi đoạn , Minh cần tính tổng của tất cả các giá trị (phần dư khi chia cho ) với mọi cặp chỉ số thỏa mãn . Nói cách khác, giá trị cần tính trong mỗi truy vấn là:
Lưu ý: Với các cặp mà , ta có .
Yêu cầu
Hãy viết chương trình tính giá trị cho mỗi truy vấn của bạn Minh. Vì kết quả có thể rất lớn, hãy in ra giá trị chính xác theo định dạng số nguyên 64-bit (`long long` trong C++).
Dữ liệu vào
- Dòng đầu tiên chứa hai số nguyên dương và () — số phần tử của dãy số và số lượng truy vấn.
- Dòng thứ hai chứa số nguyên dương (), các số cách nhau một khoảng trắng.
- Trong dòng tiếp theo, mỗi dòng chứa một cặp số nguyên () mô tả một truy vấn.
Kết quả ra
- Ghi ra tệp `THAOTAC.OUT` gồm dòng, mỗi dòng chứa một số nguyên duy nhất là kết quả của truy vấn tương ứng.
Ví dụ
`THAOTAC.INP` | `THAOTAC.OUT` | Giải thích |
|---|---|---|
`4 3` | `5` | - Đoạn gồm : |
Ràng buộc và Subtasks
- Subtask 1 (15% số điểm): .
- Subtask 2 (20% số điểm): .
- Subtask 3 (25% số điểm): ; với mọi .
- Subtask 4 (40% số điểm): .
--------- HẾT ---------
Họ và tên thí sinh: ................................................................ Số báo danh: ........................
Cán bộ coi thi không giải thích gì thêm.











