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

Tuyển sinh 10 chuyên Tin Quảng Ninh 2025-2026

SỞ GIÁO DỤC VÀ ĐÀO TẠO TỈNH QUẢNG NINH ĐỀ THI CHÍNH THỨC

KỲ THI TUYỂN SINH TRUNG HỌC PHỔ THÔNG Năm học 2025 - 2026
Môn thi: Tin học (chuyên)
(Dành cho thí sinh thi vào Trường THPT Chuyên Hạ Long)
Thời gian làm bài: 150 phút, không kể thời gian phát đề


BàiTên bàiTệp chương trìnhTệp dữ liệuTệp kết quảBộ nhớThời gian / testĐiểm
1Ước sốdiv.*div.inpdiv.out1024 MB1 giây3,0 điểm
2Tổng dãysum.*sum.inpsum.out1024 MB1 giây3,0 điểm
3Trung vịmed.*med.inpmed.out1024 MB1 giây2,5 điểm
4Dãy con tănginc.*inc.inpinc.out1024 MB1 giây1,5 điểm

Dấu * được thay thế bởi cpp hoặc py của ngôn ngữ lập trình được sử dụng tương ứng là C++ hoặc Python.

Hãy lập trình giải các bài toán sau:

Số nguyên dương a được gọi là ước nguyên dương thực sự của số nguyên n nếu a là ước của n và a < n. Ví dụ số 24 có 7 ước nguyên dương thực sự là: 1, 2, 3, 4, 6, 8, 12.

Yêu cầu: Hãy xác định ước nguyên dương thực sự lớn nhất của n.

Dữ liệu vào: Từ tệp văn bản “div.inp” gồm một dòng chứa số nguyên dương n (2 ≤ n ≤ 105).

Kết quả: Ghi ra tệp văn bản “div.out” ước nguyên dương thực sự lớn nhất của n.

Ví dụ:

div.inpdiv.out
42
71
2412

Cho một dãy gồm n số nguyên dương a1, a2, …, an.

Yêu cầu: Đếm số cặp (i, j) đồng thời thỏa mãn:

  1. 1 ≤ i < j ≤ n;
  2. ai + ai+1 + ⋯ + aj là một số chẵn.

Dữ liệu vào: Từ tệp văn bản “sum.inp”:

  • Dòng đầu chứa số nguyên dương n (2 ≤ n ≤ 105);
  • Dòng thứ hai chứa n số nguyên dương a1, a2, …, an (1 ≤ ai ≤ 109; i = 1, 2, …, n).

Kết quả: Ghi ra tệp văn bản “sum.out” số lượng cặp (i, j) thỏa mãn yêu cầu của bài.

Ví dụ:

sum.inpsum.out
5
1 2 3 4 5
4
4
2 5 6 4
1

Giải thích ví dụ 1: Số cặp thỏa mãn là: (1, 3); (1, 4); (2, 5); (3, 5).

Ràng buộc:

  • 40% số test ứng với 40% số điểm của bài thỏa mãn: n ≤ 102;
  • 40% số test khác ứng với 40% số điểm của bài thỏa mãn: 102 < n ≤ 5.103;
  • 20% số test còn lại ứng 20% số điểm của bài không có ràng buộc gì thêm.

Dãy A gồm n số nguyên a1, a2, …, an được gọi là dãy không giảm nếu thỏa mãn: a1 ≤ a2 ≤ ⋯ ≤ an.

Trung vị của dãy các số nguyên a1, a2, …, an là phần tử xuất hiện ở vị trí ⌊(n + 1)/2⌋ sau khi dãy đó được sắp xếp lại thành dãy không giảm.

Ví dụ: Cho dãy A = (2, 3, 4, 2, 8) sau khi sắp xếp lại thành dãy không giảm ta được dãy (2, 2, 3, 4, 8), trung vị của dãy là phần tử 3; dãy B = (3, 5, 7, 6) sau khi sắp xếp lại thành dãy không giảm ta được dãy (3, 5, 6, 7), trung vị của dãy là phần tử 5. Trung vị của dãy chỉ có một phần tử là chính phần tử đó.

Yêu cầu: Cho dãy A gồm n số nguyên a1, a2, …, an và số nguyên k. Hãy xác định trung vị lớn nhất của mọi dãy con gồm ít nhất k phần tử liên tiếp trong dãy đã cho.

Dữ liệu vào: Từ tệp văn bản “med.inp”:

  • Dòng đầu chứa hai số nguyên n, k (1 ≤ k ≤ n ≤ 105);
  • Dòng thứ hai chứa n số nguyên a1, a2, …, an (1 ≤ ai ≤ n; i = 1, 2, …, n).

Kết quả: Ghi ra tệp văn bản “med.out” kết quả của bài toán.

Ví dụ:

med.inpmed.out
4 2
1 3 2 4
3
4 1
1 2 2 4
4
11 2
3 2 3 2 11 5 2 3 9 10 11
10
11 6
3 2 3 2 11 5 2 3 9 10 11
9

Giải thích ví dụ 1:

Số phần tử của dãy con liên tiếpDãy con liên tiếpTrung vị
2(1, 3)1
2(3, 2)2
2(2, 4)2
3(1, 3, 2)2
3(3, 2, 4)3
4(1, 3, 2, 4)2

Do vậy trung vị lớn nhất đạt được là: 3

Ràng buộc:

  • 20% số test ứng với 20% số điểm của bài thỏa mãn: k = 2; n = 3;
  • 20% số test khác ứng với 20% số điểm của bài thỏa mãn: k = 1;
  • 30% số test khác ứng với 30% số điểm của bài thỏa mãn: n ≤ 100;
  • 30% số test còn lại ứng với 30% số điểm của bài không có ràng buộc gì thêm.

Cho dãy A gồm n số nguyên a1, a2, …, an.

Giá trị n được gọi là độ dài của dãy A.

Dãy con của A là chính A hoặc là dãy nhận được từ dãy ban đầu bằng cách bỏ đi một số phần tử.

Dãy A được gọi là dãy không giảm nếu thỏa mãn: a1 ≤ a2 ≤ ⋯ ≤ an.

Ví dụ dãy: 2, 2, 4, 9, 3, 10 ta có một số dãy con như sau: 2, 2, 4, 10; 2, 9, 3; 2, 9, 10. Trong đó, các dãy con 2, 2, 4, 10 và 2, 9, 10 được gọi là các dãy con không giảm.

Cho dãy A gồm n số nguyên, dãy B gồm m số nguyên. Dãy C được gọi là dãy con chung của hai dãy A và B nếu C vừa là dãy con của A, vừa là dãy con của B.

Ví dụ: Cho dãy A = (1, 2, 4, 9, 3) và dãy B = (0, 2, 15, 9). Dãy C = (2, 9) là một dãy con chung của hai dãy A và B.

Yêu cầu: Cho hai dãy A và B chỉ chứa các số 0 và 1, dãy A có n phần tử, dãy B có m phần tử. Hãy xác định độ dài lớn nhất của dãy con chung không giảm của A và B.

Dữ liệu vào: Từ tệp văn bản “inc.inp”:

  • Dòng đầu chứa một số nguyên n (1 ≤ n ≤ 2.105) là số phần tử của dãy A;
  • Dòng thứ hai chứa n số nguyên a1, a2, …, an (0 ≤ ai ≤ 1; i = 1, 2, …, n) là các phần tử của dãy A;
  • Dòng thứ ba chứa một số nguyên m (1 ≤ m ≤ 2.105) là số phần tử của dãy B;
  • Dòng thứ tư chứa m số nguyên b1, b2, …, b_m (0 ≤ bi ≤ 1; i = 1, 2, …, m) là các phần tử của dãy B.

Dữ kiện của bài toán đảm bảo luôn tồn tại dãy con chung.

Kết quả: Ghi ra tệp văn bản “inc.out” một số nguyên duy nhất là độ dài lớn nhất của dãy con chung không giảm của hai dãy A và B.

Ví dụ:

inc.inpinc.out
7
0 0 0 1 0 1 1
6
0 0 1 1 0 1
5
10
0 0 0 1 1 1 0 1 0 0
10
1 1 0 0 0 1 0 1 1 1
7
3
1 1 1
5
1 0 1 0 0
2

Giải thích ví dụ 1: Dãy con chung không giảm dài nhất là: 0, 0, 1, 1, 1.

Ràng buộc:

  • 25% số test ứng với 25% số điểm của bài thỏa mãn: ai = 1; i = 1, 2, …, n; 1 ≤ m, n ≤ 3000;
  • 25% số test khác ứng với 25% số điểm của bài thỏa mãn: m = n; ai = bi; i = 1, 2, …, n;
  • 25% số test khác ứng với 25% số điểm của bài thỏa mãn: 1 ≤ m, n ≤ 3000;
  • 25% số test còn lại ứng với 25% số điểm của bài không có ràng buộc gì thêm.

--- HẾT ---

Thí sinh không được sử dụng tài liệu. Giám thị không giải thích gì thêm.