Kho đề thi
Học sinh giỏi

Duyên hải Bắc Bộ 2026 - Khối 10

HSG / Olympic Tin học cấp THPT — https://oj.clue.edu.vn/exams/dhbb26-10/

Cấu trúc đề và tiến độ

Đang tải tiến độ…

  • 1
    Câu 1 — Dãy số

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 2
    Câu 2 — Đường đi

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm
  • 3
    Câu 3 — Đổ nước

    nâng cao

    Bộ chấm C++ đã qua kiểm chứng Linux: lời giải chạy 3 lần, 3 lời giải sai bị bắt. Chưa xác nhận AC trên OJ gốc.

    chưa có điểm

Duyên hải Bắc Bộ 2026 - Khối 10

Nguồn: ClueOJ statement pages printed to PDF and merged in exam order; not an original scan
Chuyển nhập/xuất tệp sang stdin/stdout khi chạy trên website.

Câu 1. Dãy số

Alice tạo dãy số nguyên a1, a2, ⋯, aN, cô cần thống kê số bộ ba chỉ số (i, j, k) thỏa mãn hai điều kiện sau:

  • 1 ≤ i < j < k ≤ N.
  • ai ≤ aj ≥ ak hoặc ai ≥ aj ≤ ak.

Yêu cầu: Cho dãy gồm N số nguyên a1, a2, ⋯, aN, hãy đếm số lượng bộ ba thỏa mãn.

Input

  • Dòng đầu chứa số nguyên dương N (N ≤ 3 × 105).
  • Dòng thứ hai chứa N số nguyên a1, a2, ⋯, aN (|ai| ≤ 109).

Output

Một số nguyên là số lượng bộ ba thỏa mãn.

Scoring

SubtaskĐiểmRàng buộc
110%N = 3
230%N ≤ 300
330%N ≤ 3000
430%Không có ràng buộc nào thêm

Sample Input 1

3
1 2 3

Sample Output 1

0

Sample Input 2

4
1 3 2 4

Sample Output 2

2

Sample Input 3

4
1 1 1 1

Sample Output 3

4

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 2. Đường đi

Alice mới tạo ra một trò chơi tìm đường đi trên mặt phẳng tọa độ. Cụ thể, một nhân vật xuất phát tại vị trí (xs, ys) cần di chuyển tới vị trí (xt, yt) trong thời gian ngắn nhất. Tại mỗi đơn vị thời gian, giả sử nhân vật đang ở vị trí (x1, y1) thì có thể di chuyển tới vị trí (x2, y2) nếu max(|x1 - x2|, |y1 - y2|) = 1. Để trò chơi thêm thú vị, Alice đặt K vật phẩm ở K vị trí (u1, v1), (u2, v2), ⋯, (uK, vK), ngoài việc di chuyển với thời gian ngắn nhất, người chơi cần chọn đường đi để thu thập được nhiều vật phẩm nhất. Nhân vật di chuyển tới vị trí có vật phẩm sẽ thu thập được vật phẩm ở vị trí đó và thời gian thu thập là không đáng kể.

Yêu cầu: Cho các thông tin (xs, ys), (xt, yt) và (u1, v1), (u2, v2), ⋯, (uK, vK), hãy tìm đường đi từ vị trí (xs, ys) đến (xt, yt) với thời gian ngắn nhất, trong số các đường đi ngắn nhất đó, chọn con đường đi qua nhiều vị trí chứa vật phẩm nhất.

Input

  • Dòng đầu chứa năm số nguyên xs, ys, xt, yt, K (|xs|, |ys|, |xt|, |yt| ≤ 109; K ≤ 105);
  • Dòng thứ i trong K dòng sau chứa hai số nguyên ui, vi (|ui|, |vi| ≤ 109).

Output

Gồm một số nguyên không âm là số vật phẩm nhiều nhất có thể thu thập được.

Scoring

SubtaskĐiểmRàng buộc
125%K ≤ 10
225%K ≤ 20
325%K ≤ 3000
425%Không có ràng buộc nào thêm.

Sample Input 1

0 0 4 0 3
1 1
3 -1
2 0

Sample Output 1

3

Sample Input 2

0 0 4 0 4
1 1
2 2
2 0
3 -1

Sample Output 2

3

Sample Input 3

0 0 2 2 1
0 1

Sample Output 3

0

Notes

  • Ví dụ 1: (0, 0) → (1, 1) → (2, 0) → (3, -1) → (4, 0)
  • Ví dụ 2: (0, 0) → (1, 1) → (2, 0) → (3, -1) → (4, 0)
  • Ví dụ 3: (0, 0) → (1, 1) → (2, 2)

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Câu 3. Đổ nước

Alice có N bình nước giống nhau, mỗi bình có thể chứa được V lít nước. Hiện tại, bình thứ i (1 ≤ i ≤ N) chứa vi lít nước (v1 + v2 + ⋯ + vN = V). Alice muốn thực hiện một dãy các lần đổ nước giữa các bình để số lượng bình rỗng là nhiều nhất. Mỗi lần cô có thể đổ nước từ bình i sang bình j nếu vi ≥ vj một lượng nước bằng vj lít, sau khi đổ bình i còn vi - vj lít, bình j có 2vj lít.

Yêu cầu: Hãy tìm một dãy các lần đổ nước để số bình rỗng là nhiều nhất.

Input

Dòng đầu chứa số nguyên T (T ≤ 10) là số bộ dữ liệu, tiếp theo là các nhóm dòng, mỗi nhóm có khuôn dạng:

  • Dòng đầu của nhóm chứa số nguyên dương N (2 ≤ N ≤ 10).
  • Dòng thứ hai của nhóm chứa N số nguyên dương v1, v2, ⋯, vN (v1 + v2 + ⋯ + vN = V ≤ 1012).

Output

Gồm T nhóm dòng, mỗi nhóm mô tả lời giải tương ứng một bộ dữ liệu theo khuôn dạng:

  • Dòng đầu ghi số nguyên S là số lần đổ nước;
  • Dòng thứ t (1 ≤ t ≤ S) trong S dòng sau, mỗi dòng ghi hai số i, j cho biết lần đổ thứ t đổ nước từ bình i sang bình j.

Scoring

SubtaskĐiểmRàng buộc
120%N = 3 và V ≤ 300
220%N = 3 và V ≤ 3000
320%V ≤ 3000
420%N = 3
520%Không có ràng buộc nào thêm.

Sample Input 1

2
3
1 2 3
4
1 1 1 1

Sample Output 1

2
3 1
2 1
3
2 3
1 4
4 3

Notes

  • Với bộ dữ liệu thứ nhất có thể nhận được 1 bình rỗng. (1, 2, 3) → (2, 2, 2) → (2, 0, 4)
  • Với bộ dữ liệu thứ hai có thể nhận được 3 bình rỗng. (1, 1, 1, 1) → (2, 0, 2, 0) → (4, 0, 0, 0)

---

Ghi chú về bản chuyển thể

Nhập từ stdin và in ra stdout, không cần tạo tệp .INP/.OUT.

Trạng thái lời giải: C++ đã qua bộ kiểm thử cục bộ; chưa xác nhận AC trên OJ.

Không có thời lượng chính thức trong nguồn; phòng luyện tập dùng 180 phút, không mô phỏng thời lượng kỳ thi gốc. Nguồn chưa xác nhận đầy đủ điểm từng bài; dùng trọng số đều trên thang luyện tập 100, không phải thang điểm chính thức. Chuyển nhập/xuất tệp sang stdin/stdout; tiếng Việt là bản nguồn, bản tiếng Anh chưa dịch.
Nhóm Zalo