Kho đề thi
Học sinh giỏi

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

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

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

Đang tải tiến độ…

  • 1
    Câu 1 — Dữ liệu

    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 — Bảng 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
  • 3
    Câu 3 — Cứu hộ

    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ộ 2023 - 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ữ liệu

Dữ liệu tài chính của một công ty trong n ngày được biểu diễn bằng một dãy số t1, t2, ..., tn, trong đó ti (1 ≤ i ≤ n) là lượng tiền thu về của ngày thứ i. Lãnh đạo công ty thường xuyên yêu cầu thống kê số liệu về tổng tiền lớn nhất thu được của hai ngày liên tiếp trong các ngày từ ngày L đến ngày R (L < R), nghĩa là cần tìm giá trị lớn nhất trong các giá trị (ti + ti+1) với L ≤ i < R.

Một nhân viên đã truy cập trái phép dữ liệu của công ty và trước mỗi lần lãnh đạo công ty yêu cầu thống kê số liệu, nhân viên sẽ tìm cách đảo ngược một đoạn dữ liệu nào đó trong các ngày từ ngày L đến ngày R với mục đích khi thống kê dữ liệu trong đoạn từ ngày L đến ngày R thì giá trị trả về càng lớn càng tốt. Ví dụ, nếu đảo ngược đoạn từ ngày i đến ngày j (L ≤ i ≤ j ≤ R) trên dữ liệu ban đầu t1, t2, ..., ti, ti+1, ..., tj, ..., tn thì dữ liệu thay đổi là t1, t2, ..., tj, tj-1, ..., ti, ..., tn. Sau khi thống kê số liệu xong, người này sẽ lại thay đổi dữ liệu như ban đầu.

Yêu cầu: Cho biết dữ liệu ban đầu là t1, t2, ..., tn và q lần yêu cầu thống kê dữ liệu, hãy cho biết số liệu thống kê trả về khi bị can thiệp vào dữ liệu.

Input

  • Dòng đầu chứa hai số nguyên dương n, q;
  • Dòng thứ hai chứa n số nguyên không âm t1, t2, ..., tn (ti ≤ 109);
  • Dòng thứ k (1 ≤ k ≤ q) trong q dòng sau, mỗi dòng chứa hai số nguyên mô tả yêu cầu thống kê dữ liệu L, R (1 ≤ L < R ≤ n).

Output

  • Ghi ra thiết bị ra chuẩn gồm q dòng, mỗi dòng chứa một số nguyên là giá trị mà lãnh đạo công ty nhận được khi yêu cầu thống kê dữ liệu tương ứng trong file dữ liệu vào.

Sample Input 1

5 2
5 2 3 1 3
1 5
4 5

Sample Output 1

8
4

Giải thích:

  • Với yêu cầu thống kê thứ nhất, đảo ngược đoạn từ ngày 1 đến ngày 2 để có dữ liệu mới: 2 5 3 1 3, kết quả thống kê được là 8.
  • Với yêu cầu thống kê thứ hai, đảo ngược đoạn từ ngày 4 đến ngày 5 để có dữ liệu mới: 5 2 3 3 1 , kết quả thống kê được là 4.

Subtasks

  • Subtask 1 (50 điểm): n, q ≤ 50;
  • Subtask 2 (25 điểm): n, q ≤ 5000;
  • Subtask 3 (25 điểm): n, q ≤ 105.

---

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. Bảng số

Cho mảng A gồm m phần tử (các phần tử được đánh số từ 1 đến m) và mảng B gồm n phần tử (các phần tử được đánh số từ 1 đến n), mỗi phần tử của hai mảng chỉ nhận một trong ba giá trị -1, 0, 1. Tiến hành tạo bảng C kích thước m × n, trong đó phần tử (i, j) nhận giá trị C[i][j] = A[i] × B[j] với 1 ≤ i ≤ m và 1 ≤ j ≤ n.

Một bảng con vuông kích thước s của bảng C có phần tử trái trên là (x, y) và phần tử phải dưới là (x + s - 1, y + s - 1) với 1 ≤ x ≤ m - s + 1 và 1 ≤ y ≤ n - s + 1 được gọi là bảng con vuông "cân bằng" nếu: 1) Các phần tử thuộc đường chéo chính đều nhận giá trị bằng 1. Cụ thể, các phần tử (x, y), (x+1, y+1), ..., (x+s-1, y+s-1) có giá trị bằng 1. 2) Tổng tất cả các phần tử trong bảng con vuông bằng 0.

Yêu cầu: Cho hai mảng A và B, đếm số bảng con vuông "cân bằng" trong bảng C.

Input

  • Dòng đầu chứa hai số nguyên dương m, n;
  • Dòng thứ hai gồm m số mô tả mảng A;
  • Dòng thứ ba gồm n số mô tả mảng B.

Output

  • Ghi ra thiết bị ra chuẩn một số là số bảng con vuông "cân bằng" trong bảng C.

Sample Input 1

3 4
1 -1 1
1 0 -1 1

Sample Output 1

1

Giải thích: Bảng C:

B\textbackslashA1-11
11-11
0000
-1-11-1
11-11

Chỉ có duy nhất một bảng con vuông "cân bằng" là bảng con kích thước 2 có phần tử trái trên là (2, 3).

Subtasks

  • Subtask 1 (20 điểm): m, n ≤ 30;
  • Subtask 2 (20 điểm): m, n ≤ 300;
  • Subtask 3 (30 điểm): m, n ≤ 1000;
  • Subtask 4 (20 điểm): m × n ≤ 5 · 106.

---

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. Cứu hộ

Vũ trụ Z có n hành tinh, các hành tinh được đánh số từ 1 đến n. Một hệ thống gồm m đường dịch chuyển, đường dịch chuyển thứ k (1 ≤ k ≤ m) sẽ giúp di chuyển từ hành tinh ik đến hành tinh jk và mất chi phí là e(ik, jk). Một vụ nổ trong vũ trụ đã làm ảnh hưởng lớn đến tất cả các hành tinh, trừ hành tinh số 1. Hành tinh số 1 lên kế hoạch cứu hộ cho n - 1 hành tinh còn lại.

Các nhà khoa học ở hành tinh số 1 đã tìm ra cách di chuyển giúp đội cứu hộ có thể di chuyển đến một hành tinh khác với chi phí nhỏ hơn. Cụ thể, với số nguyên không âm a mà các nhà khoa học thiết đặt, giả sử đội cứu hộ lần lượt di chuyển qua dãy gồm p hành tinh 1 = x1, x2, ..., xp. Như vậy, đội cứu hộ sẽ phải sử dụng p - 1 đường dịch chuyển, gọi s1 là tổng chi phí của p - 1 đường dịch chuyển, gọi r1 là tổng chi phí của a đường dịch chuyển có chi phí lớn nhất trong p - 1 đường dịch chuyển (nếu a > p - 1 thì tính tổng chi phí của p - 1 đường dịch chuyển), khi đó đội cứu hộ sẽ mất chi phí là s1 - r1.

Về phía các hành tinh, các nhà khoa học cũng đã tính toán ra số nguyên không âm b dựa trên mức độ ảnh hưởng của vụ nổ để xác định được chi phí di chuyển của cư dân. Cụ thể, nếu cư dân hành tinh i phải di chuyển qua dãy gồm q hành tinh i = y1, y2, ..., yq, gọi s2 là tổng chi phí của q - 1 đường dịch chuyển, gọi r2 là tổng chi phí của b đường dịch chuyển có chi phí nhỏ nhất trong q - 1 đường dịch chuyển (nếu b > q - 1 thì tính tổng chi phí của q - 1 đường dịch chuyển), khi đó cư dân sẽ mất chi phí là s2 + r2.

Chi phí để đội cứu hộ gặp được cư dân hành tinh i là tổng chi phí di chuyển của đội cứu hộ cộng với tổng chi phí của cư dân hành tinh i di chuyển để họ gặp được nhau.

Yêu cầu: Với mỗi hành tinh i (2 ≤ i ≤ n), hãy tính chi phí nhỏ nhất để đội cứu hộ xuất phát từ hành tinh 1 có thể gặp cư dân hành tinh i.

Input

  • Dòng đầu chứa bốn số nguyên n, m, a, b;
  • Dòng thứ k (1 ≤ k ≤ m) trong m dòng tiếp theo chứa ba số nguyên dương ik, jk, e(ik, jk), trong đó ik ≠ jk ≤ n và e(ik, jk) ≤ 109. Dữ liệu đảm bảo từ hành tinh i không có quá một đường dịch chuyển tới j và không tới chính nó.

Output

  • Ghi ra thiết bị ra chuẩn gồm một dòng chứa n - 1 số, số thứ i là chi phí nhỏ nhất để đội cứu hộ có thể gặp cư dân hành tinh i+1, nếu đội cứu hộ không thể gặp được cư dân thì đưa ra số -1 tương ứng.

Sample Input 1

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

Sample Output 1

0 1 2

Giải thích:

Hình minh họa được liên kết tại nguồn hiện không còn truy cập; phần phát biểu bằng chữ vẫn được giữ.

Subtasks

  • Subtask 1 (25 điểm): n ≤ 100; m ≤ 1000; a = b = 0;
  • Subtask 2 (25 điểm): n ≤ 100; m ≤ 1000; a = b = 1;
  • Subtask 3 (25 điểm): n ≤ 105; m ≤ 105; a = b = 0;
  • Subtask 4 (25 điểm): n ≤ 105; m ≤ 105; 0 ≤ a, b ≤ 3;

---

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