ĐỀ THI CHỌN ĐỘI TUYỂN QUỐC GIA DỰ THI HSGQG NĂM HỌC 2027 - 2028 - MÔN TIN HỌC

Tin họcDChia sẻ bởi Duy Khánh 7 lượt sử dụng đề

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 xx được gọi là số chính phương nếu xx là bình phương của một số nguyên (x=k2x = k^2 với k∈Z+k \in \mathbb{Z}^+). Trong số học, một số nguyên dương pp lớn hơn 11 được gọi là số nguyên tố nếu nó chỉ có đúng hai ước nguyên dương là 11 và chính nó.

Một số nguyên dương xx được gọi là số siêu chính phương nếu xx là bình phương của một số nguyên tố, nghĩa là tồn tại số nguyên tố pp sao cho:

x=p2x = p^2

Ví dụ: 4=224 = 2^2, 9=329 = 3^2, 25=5225 = 5^2, 49=7249 = 7^2 là các số siêu chính phương; trong khi 11, 16=4216 = 4^2, 36=6236 = 6^2 không phải là số siêu chính phương.

Cho một dãy số nguyên A=(a1,a2,…,an)A = (a_1, a_2, \dots, a_n) gồm nn phần tử (aia_i có thể âm, dương hoặc bằng 00). Một đoạn con liên tiếp A[l..r]=(al,al+1,…,ar)A[l..r] = (a_l, a_{l+1}, \dots, a_r) (1≤l≤r≤n1 \le l \le r \le n) đượ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:

P(l,r)=∏i=lrai=al×al+1×⋯×arP(l, r) = \prod_{i=l}^r a_i = a_l \times a_{l+1} \times \dots \times a_r

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 AA.
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 00).

Dữ liệu vào

- Dòng đầu tiên chứa số nguyên dương nn (1≤n≤2×1051 \le n \le 2 \times 10^5) — số lượng phần tử của dãy số.
- Dòng thứ hai chứa 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

- 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`
`2 -1 2 9 -1 1`

`5 1`

Đoạn con từ chỉ số 11 đến 55 là (2,−1,2,9,−1)(2, -1, 2, 9, -1) có tích là:
2×(−1)×2×9×(−1)=362 \times (-1) \times 2 \times 9 \times (-1) = 36 (không là siêu cp).
Xét đoạn từ 11 đến 33: (2,−1,2)→−4(2, -1, 2) \to -4 (âm).
Đoạn (2,−1,2,9,−1,1)(2, -1, 2, 9, -1, 1) có tích =36= 36.
Đoạn từ 22 đến 66: (−1,2,9,−1,1)(-1, 2, 9, -1, 1) có tích =(−1)×2×9×(−1)×1=18= (-1)\times 2\times 9\times (-1)\times 1 = 18 (không phải).
Đoạn từ 33 đến 55: (2,9,−1)→(2, 9, -1) \to âm.
Nếu xét dãy: `6`
`2 2 1 1 1 9` thì đoạn (2,2,1,1,1)(2, 2, 1, 1, 1) có độ dài 55 và tích =4=22= 4 = 2^2 (siêu chính phương).

`5`
`2 2 1 1 9`

`4 1`

Đoạn con dài nhất là A[1..4]=(2,2,1,1)A[1..4] = (2, 2, 1, 1) có độ dài 44, tích là 4=224 = 2^2 (là số siêu chính phương). Có duy nhất 11 đoạn như vậy.

Ràng buộc và Subtasks

- Subtask 1 (20% số điểm): n≤200n \le 200; −100≤ai≤100-100 \le a_i \le 100.
- Subtask 2 (30% số điểm): n≤3000n \le 3000; ∣ai∣≤104|a_i| \le 10^4.
- Subtask 3 (25% số điểm): n≤105n \le 10^5; ai≥1a_i \ge 1 với mọi ii.
- Subtask 4 (25% số điểm): n≤2×105n \le 2 \times 10^5; −106≤ai≤106-10^6 \le a_i \le 10^6.


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 nn máy tính được đánh số từ 11 đến nn. 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 11. Mỗi máy tính ii (2≤i≤n2 \le i \le n) đượ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à pip_i.

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 kk máy tính D={d1,d2,…,dk}D = \{d_1, d_2, \dots, d_k\}. 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 qq 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 vv.
- Nếu máy vv chưa có chương trình bảo vệ và chưa bị nhiễm virus: máy vv lập tức bị nhiễm virus.
- Nếu máy vv đã 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 vv (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 uu. Kể từ thời điểm này, máy uu được bảo vệ (nếu máy uu đã bị nhiễm virus trước đó thì virus tại uu 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 uu được đẩy ngược lên máy cha trực tiếp của uu (tức máy pup_u). Máy pup_u 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 uu, hãy xác định xem máy uu hiện tại có đang bị virus xâm nhập hay không? In ra `YES` nếu máy uu đã 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 n,q,kn, q, k (1≤k≤n≤105;1≤q≤1051 \le k \le n \le 10^5; 1 \le q \le 10^5) — 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 n−1n - 1 số nguyên p2,p3,…,pnp_2, p_3, \dots, p_n (1≤pi<i1 \le p_i < i) mô tả máy cha của từng máy từ 22 đến nn.
- Dòng thứ ba chứa kk số nguyên phân biệt d1,d2,…,dkd_1, d_2, \dots, d_k (1≤di≤n1 \le d_i \le n) — danh sách các máy ban đầu được cài đặt chương trình bảo vệ.
- Trong qq 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 vv (1≤v≤n1 \le v \le n).
- `2 u`: Cài đặt bảo vệ tại máy uu (1≤u≤n1 \le u \le n).
- `3 u`: Đẩy tín hiệu bảo vệ lên máy cha của uu (2≤u≤n2 \le u \le n).
- `4 u`: Kiểm tra trạng thái máy uu (1≤u≤n1 \le u \le n).

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`
`1 1 2 2`
`3`
`1 1`
`4 1`
`1 1`
`4 2`
`4 3`
`4 4`

`YES`
`YES`
`NO`
`NO`

Đồ thị cây gồm 55 đỉnh: gốc 11, con của 11 là {2,3}\{2, 3\}, con của 22 là {4,5}\{4, 5\}.
Đỉnh 33 ban đầu có bảo vệ.
- Lần 1: `1 1` →\to Đỉnh 11 bị nhiễm.
- Lần 2: `4 1` →\to Đỉnh 11 đã nhiễm →\to `YES`.
- Lần 3: `1 1` →\to Đỉnh 11 đã nhiễm từ trước, virus lan xuống các con là {2,3}\{2, 3\}. Do 33 có bảo vệ nên chỉ đỉnh 22 bị nhiễm.
- Lần 4: `4 2` →\to Đỉnh 22 đã nhiễm →\to `YES`.
- Lần 5: `4 3` →\to Đỉnh 33 an toàn →\to `NO`.
- Lần 6: `4 4` →\to Đỉnh 44 chưa bị lan tới →\to `NO`.

Ràng buộc và Subtasks

- Subtask 1 (15% số điểm): n,q≤1000n, q \le 1000; cây có dạng đường thẳng (pi=i−1p_i = i - 1).
- Subtask 2 (20% số điểm): n,q≤2000n, q \le 2000; không có truy vấn loại 2 và loại 3.
- Subtask 3 (25% số điểm): n,q≤105n, q \le 10^5; cây có độ cao không quá 2020.
- Subtask 4 (40% số điểm): n,q≤105n, q \le 10^5; 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 A=(a1,a2,…,an)A = (a_1, a_2, \dots, a_n) gồm nn phần tử. Bạn Minh cần thực hiện qq truy vấn, mỗi truy vấn được cho bởi một đoạn chỉ số [l,r][l, r] (1≤l≤r≤n1 \le l \le r \le n).

Với mỗi đoạn [l,r][l, r], Minh cần tính tổng của tất cả các giá trị ai mod aja_i \bmod a_j (phần dư khi chia aia_i cho aja_j) với mọi cặp chỉ số (i,j)(i, j) thỏa mãn l≤i,j≤rl \le i, j \le r. Nói cách khác, giá trị cần tính trong mỗi truy vấn là:

F(l,r)=∑i=lr∑j=lr(ai mod aj)F(l, r) = \sum_{i=l}^r \sum_{j=l}^r (a_i \bmod a_j)

Lưu ý: Với các cặp mà i=ji = j, ta có ai mod ai=0a_i \bmod a_i = 0.

Yêu cầu

Hãy viết chương trình tính giá trị F(l,r)F(l, r) 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 nn và qq (1≤n≤105;1≤q≤1051 \le n \le 10^5; 1 \le q \le 10^5) — số phần tử của dãy số và số lượng truy vấn.
- Dòng thứ hai chứa nn số nguyên dương a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤2×1051 \le a_i \le 2 \times 10^5), các số cách nhau một khoảng trắng.
- Trong qq dòng tiếp theo, mỗi dòng chứa một cặp số nguyên l,rl, r (1≤l≤r≤n1 \le l \le r \le n) mô tả một truy vấn.

Kết quả ra

- Ghi ra tệp `THAOTAC.OUT` gồm qq dòng, mỗi dòng chứa một số nguyên duy nhất là kết quả F(l,r)F(l, r) của truy vấn tương ứng.

Ví dụ

`THAOTAC.INP`

`THAOTAC.OUT`

Giải thích

`4 3`
`3 5 2 6`
`1 3`
`2 4`
`1 4`

`5`
`6`
`16`

- Đoạn [1,3][1, 3] gồm {3,5,2}\{3, 5, 2\}:
(3%5)+(3%2)+(5%3)+(5%2)+(2%3)+(2%5)(3\%5) + (3\%2) + (5\%3) + (5\%2) + (2\%3) + (2\%5)
=3+1+2+1+2+2=11−6=5= 3 + 1 + 2 + 1 + 2 + 2 = 11 - 6 = 5.
- Đoạn [2,4][2, 4] gồm {5,2,6}\{5, 2, 6\}:
(5%2)+(5%6)+(2%5)+(2%6)+(6%5)+(6%2)(5\%2) + (5\%6) + (2\%5) + (2\%6) + (6\%5) + (6\%2)
=1+5+2+2+1+0=11= 1 + 5 + 2 + 2 + 1 + 0 = 11 (chỉnh lại: 1+5+2+2+1+0=111+5+2+2+1+0 = 11, tổng cặp khác nhau).

Ràng buộc và Subtasks

- Subtask 1 (15% số điểm): n,q≤300n, q \le 300.
- Subtask 2 (20% số điểm): n,q≤3000n, q \le 3000.
- Subtask 3 (25% số điểm): n,q≤5×104n, q \le 5 \times 10^4; ai≤1000a_i \le 1000 với mọi ii.
- Subtask 4 (40% số điểm): n≤105;q≤105;ai≤2×105n \le 10^5; q \le 10^5; a_i \le 2 \times 10^5.

--------- 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.

Xem tất cả