Duyên hải Bắc Bộ 2023 - Khối 11
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. 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 1Sample Output 1
1Giải thích: Bảng C:
| B\textbackslashA | 1 | -1 | 1 |
|---|---|---|---|
| 1 | 1 | -1 | 1 |
| 0 | 0 | 0 | 0 |
| -1 | -1 | 1 | -1 |
| 1 | 1 | -1 | 1 |
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 2. 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 1Sample Output 1
0 1 2Giả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.
Câu 3. Thay đổi 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à dữ liệu cho ngày thứ i, nếu ti ≥ 0 tức là ngày i công ty thu về ti đồng, ngược lại ti < 0 tức là ngày i công ty phải chi |ti| đồng. Lãnh đạo công ty thường xuyên thống kê số liệu về tổng thu chi của một dãy ngày liên tiếp mà có biến động lớn nhất, mức đánh giá biến động từ ngày L đến ngày R được tính bằng |∑i=LR ti|.
Một nhân viên đã truy cập trái phép dữ liệu của công ty và trước khi lãnh đạo công ty thống kê số liệu, nhân viên đã thay đổi số liệu của một dãy các ngày liên tiếp từ ngày u đến ngày v (1 ≤ u ≤ v ≤ n) một lượng c, cụ thể với ngày i (u ≤ i ≤ v) giá trị ti được thay đổi thành ti + c. Sau khi thống kê số liệu xong, nhân viên 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 giả định thay đổi số liệu, với mỗi giả định hãy cho biết giá trị |∑i=LR ti| lớn nhất với 1 ≤ L ≤ R ≤ n.
Input
- Dòng đầu chứa hai số nguyên dương n, q;
- Dòng thứ hai chứa n số nguyên t1, t2, ..., tn (|ti| ≤ 109);
- Dòng thứ k (1 ≤ k ≤ q) trong q dòng sau, mỗi dòng chứa ba số nguyên mô tả giả định thay đổi số liệu u, v, c (1 ≤ u ≤ v ≤ n; |c| ≤ 109).
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 thống kê được tương ứng với giả định trong file dữ liệu vào.
Sample Input 1
5 2
1 -1 2 1 1
2 2 -2
2 4 -2Sample Output 1
4
4Giải thích:
- Dữ liệu thay đổi theo giả định thứ nhất: 1 -3 2 1 1, kết quả thống kê được là 4 (đoạn từ 3 đến 5).
- Dữ liệu thay đổi theo giả định thứ hai: 1 -3 0 -1 1, kết quả thống kê được là 4 (đoạn từ 2 đến 4).
Subtasks
- Subtask 1 (15 điểm): n, q ≤ 20;
- Subtask 2 (15 điểm): n, q ≤ 5000;
- Subtask 3 (20 điểm): n, q ≤ 105 và cả q giả định có v - u ≤ 20;
- Subtask 4 (30 điểm): n, q ≤ 105 và số cặp (u, v) khác nhau trong q giả định không quá 20 cặp;
- Subtask 5 (20 đ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.
