Tam giác (OLP MT&TN 2022 CT)
Thời gian rảnh Thuận thường hướng dẫn các em nhỏ học lập trình, dưới đây là một bài toán rèn luyện kĩ năng cũng như tư duy lập trình.
Cho một dãy số nguyên dương \(a_1, a_2, ..., a_n (1 < a_i \le 10^9)\) và số nguyên dương \(t (1 \le t \le 3)\). Gọi \(s_1, s_2, s_3\) tương ứng là số bộ chỉ số \(1 \le i < j < k \le n\) mà \(a_i, a_j, a_k\) là ba cạnh của một tam giác nhọn, tam giác vuông, tam giác tù. Hãy tính giá trị \(s_t\).
Input
Vào từ thiết bị vào chuẩn có khuôn dạng:
- Dòng đầu chứa hai số nguyên dương \(n, t\);
- Dòng thứ hai gồm \(n\) số nguyên dương \(a_1, a_2, ..., a_n\).
Output
- Ghi ra thiết bị ra chuẩn một dòng chứa một số nguyên là giá trị \(s_t\) tính được.
Scoring
- Subtask #1 (\(30\%\) số điểm): \(n = 3\) và 10% cho từng giá trị của \(t\);
- Subtask #2 (\(30\%\) số điểm): \(n \le 300\) và 10% cho từng giá trị của \(t\);
- Subtask #3 (\(40\%\) số điểm): \(n \le 3000\)
Example
Test 1
Input
3 2
3 4 5
Output
1
Test 2
Input
4 1
3 4 5 6
Output
1
Phần thưởng
Đan là người thắng cuộc trong một kì thi lập trình và được nhận các phần thưởng theo cách sau: Ban tổ chức chuẩn bị n món quà, các món quà được đánh số từ \(1\) đến \(n\), món quà thứ \(i\) \((1 \leq i \leq n)\) có khối lượng \(w_{i}\) với giá trị \(v_{i}\) và cho phép Đan chọn lấy một số món quà nhưng tổng khối lượng các món quà không được vượt quá \(S\). Đan mong muốn chọn các món quà thỏa mãn yêu cầu của Ban tổ chức mà tổng giá trị là lớn nhất. Tuy nhiên, điều này rất khó để thực hiện tối ưu. Do đó, khi chọn các món quà xong, Ban tổ chức cho Đan thêm một cơ hội, Đan có thể lập trình để tìm một phương án bỏ chọn một món quà và thay bằng một món quà chưa chọn khác mà tổng khối lượng tất cả các món quà chọn vẫn không vượt quá \(S\). Tất nhiên, Đan cũng có quyền không đổi, giữ nguyên các món quà đã chọn.
Yêu cầu: Cho thông tin các món quà và phương án mà Đan đã chọn, hãy tính tổng giá trị lớn nhất có thể đạt được.
Input
- Dòng đầu chứa hai số nguyên dương \(n, S\) \((S \leq 10^{9})\)
- Dòng thứ \(i\) \((1 \leq i \leq n)\) trong \(n\) dòng tiếp theo chứa hai số nguyên dương \(w_{i}, v_{i}, c_{i}\) (\(w_{i},v_{i} \leq 10^{9}\); \(c_{i}\) bằng \(1\) hoặc \(0\) tương ứng món quà thứ \(i\) được chọn hoặc không được chọn trong phương án chọn trước khi được phép đổi chọn một món quà).
Dữ liệu đảm bảo tổng khối lượng các món quà mà Đan đã chọn không vượt quá \(S\).
Output
- In ra chuẩn một dòng chứa một số nguyên là tổng giá trị lớn nhất có thể đạt được.
Scoring
- Subtask \(1\) (\(70\%\) số điểm): \(n \leq 10^{3}\).
- Subtask \(2\) (\(30\%\) số điểm): \(n \leq 10^{5}\).
Example
Test 1
Input
5 13
2 5 0
3 6 1
4 7 1
5 8 1
6 9 0
Output
22
Note
Các món quà mà Đan chọn trước khi đổi là: \(2, 3, 4\) với tổng giá trị là \(6 + 7 + 8 = 21\).
Đan sẽ bỏ chọn món quà \(4\) và thay bằng món quà \(5\) để được tổng giá trị là \(6 + 7 + 9 = 22\).
Test 2
Input
3 10
4 5 1
6 8 1
5 7 0
Output
13
Note
Các món quà mà Đan chọn trước khi đổi là: \(1, 2\) với tổng giá trị là \(5 + 8 = 13\) và Đan không thay đổi các món quà đã chọn.
Khai thác khoáng sản
Miền Trung - Tây Nguyên ngày nay là một vùng đất tiềm năng giàu khoáng sản chưa được khai thác nhiều. Một dự án khai thác mỏ sắt nơi đây dự định xây dựng \(N\) địa điểm và \(M\) con đường nối giữa các cặp điểm, các địa điểm được đánh số từ \(1\) đến \(N\), các con đường được đánh số từ \(1\) đến \(M\). Con đường thứ \(i\) có chi phí xây dựng \(C_i\), giá trị sử dụng \(V_i\) và nối địa điểm \(x_i\) với \(y_i\) cho phép đi lại theo cả hai chiều. Có thể có nhiều con đường nối cùng một cặp điểm. Có \(Q\) địa điểm đặc biệt nơi mà khoáng sắt tập trung nhiều là \(k_1, k_2, \ldots, k_Q\).
Ban quản lý dự án muốn chọn ra một số con đường để xây dựng, sao cho tổng giá trị sử dụng lớn hơn hoặc bằng $V^ * $, bảo đảm đi lại giữa \(Q\) địa điểm đặc biệt, và tổng chi phí xây dựng là càng nhỏ càng tốt. Hãy giúp họ tìm ra một phương án.
Đây là bài toán chỉ cần nộp các file kết quả đầu ra (OUTPUT-ONLY). Thí sinh được cho 20 file đầu vào tương ứng với 20 test, đối với mỗi file đầu vào thí sinh cần nộp một file kết quả đầu ra tìm được. Với mỗi file kết quả đầu ra đúng đắn, điểm của thí sinh được tính theo công thức trong phần Scoring.
Input
Thí sinh tải đầu vào tại đường dẫn: https://lqdoj.edu.vn/media/olp4ck3c.zip
Sau khi giải nén, bạn có 20 file đầu vào được đặt tên là 01.inp, 02.inp, ..., 20.inp, mỗi file mô tả một test theo định dạng:
- Dòng đầu ghi bốn số nguyên \(N\), \(M\), \(Q\) và $V^ * $ (\(1 \leq N,M,Q \leq 1000\), \(1 \leq V^* \leq 10^9\));
- Dòng thứ \(i\) trong số \(M\) dòng tiếp theo chứa bốn số nguyên \(x_i, y_i, C_i, V_i\) (\(1 \leq x_i, y_i \leq n\), \(1 \leq c_i, v_i \leq 10^6\));
- Dòng tiếp theo chứa \(k_1, k_2, \ldots, k_Q\) (\(1 \leq k_i \leq n\)).
Dữ liệu bảo đảm $V^ * $ không vượt quá tổng giá trị sử dụng của tất cả các cạnh, và nếu xây dựng cả \(M\) cạnh thì luôn đảm bảo đi lại giữa \(Q\) đỉnh đặc biệt.
Output
Với file đầu vào name.inp, bạn cần xuất ra file đầu ra name.out chứa kết quả test tương ứng theo định dạng:
- Dòng đầu ghi một số nguyên là tổng chi phí xây dựng tìm được;
- Dòng thứ hai ghi một số nguyên \(T\) là số cạnh được xây dựng, theo sau bởi \(T\) số nguyên dương là chỉ số của các cạnh đó.
Mỗi lần nộp bài bạn có thể nộp một hoặc nhiều file đầu ra, bạn cần nén các file đầu ra này lại thành submission.zip để nộp. Ở mục chọn ngôn ngữ của trang nộp bài, chọn "Output".
Subtasks
- Subtask 1 (\(5\) điểm): \(M \leq 20\);
- Subtask 2 (\(5\) điểm): \(V^*=1, Q=N\);
- Subtask 3 (\(10\) điểm): \(V^ * =1\);
- Subtask 4 (\(15\) điểm): \(Q=N\);
- Subtask 5 (\(65\) điểm): Không có ràng buộc gì thêm.
Examples
Test 1
Input
6 6 2 6
1 5 2 2
1 3 5 5
2 5 2 1
2 3 2 3
3 5 2 1
4 6 1 4
1 3
Output
5
3 1 5 6
Note
Có ba cạnh được xây dựng là \(1, 5, 6\); đảm bảo đi lại giữa đỉnh \(1\) và \(3\). Tổng giá trị sử dụng là \(2+1+4=7 > 6\). Tổng chi phí xây dựng là \(2+2+1 = 5\).
Scoring
Đối với mỗi test, bạn sẽ bị \(0\) điểm nếu đầu ra không hợp lệ; ngược lại, gọi \(C\) là tổng chi phí xây dựng các cạnh mà bạn tìm được, Ban tổ chức có một giá trị \(J\) đối với test đó:
- Nếu \(\frac{C}{J} < 1\) bạn được 1 điểm cho test đó;
- Nếu \(1 \leq \frac{C}{J} \leq 2\) bạn được \((\frac{2J-C}{J})^3 \times 100\%\) số điểm cho test đó;
- Nếu \(\frac{C}{J} > 2\) bạn được 0 điểm cho test đó.
- Trong quá trình thi, nếu bài làm của bạn tốt hơn của ban tổ chức ở một test nào đó, kết quả này sẽ được cập nhật cho ban tổ chức và dùng để chấm điểm cho các thí sinh khác. Việc cập nhật sẽ được thực hiện nhiều lần trong suốt quá trình thi mà không có thông báo gì thêm.
Điểm của lần nộp là tổng điểm đạt được của các test. Điểm của bài là điểm lớn nhất trong số các lần nộp.
Công việc (OLP MT&TN 2021 CT)
Cho \(n\) công việc và mối quan hệ xử lí trước sau được mô tả bằng một cây. Mỗi nút tương ứng với một công việc và phải thực hiện trong một đơn vị thời gian. Các công việc tương ứng với nút lá cần được thực hiện trước công việc tương ứng với nút cha. Có m máy, mỗi máy trong một đơn vị thời gian chỉ xử lí liên tục được một công việc.
Yêu cầu: Xếp lịch để thời gian hoàn thành là sớm nhất.
Input
- Vào từ thiết bị vào chuẩn có khuôn dạng:
- Dòng đầu chứa hai số \(n, m\);
- Tiếp theo là \(n-1\) dòng, mỗi dòng mô tả một cạnh của cây.
Output
- Ghi ra thiết bị ra chuẩn một số nguyên là thời gian nhỏ nhất cần để thực hiện.
Scoring
- Subtask \(1\) (\(40\%\) số điểm): \(n≤ 3000\);
- Subtask \(2\) (\(60\%\) số điểm): \(n≤ 300000\).
Example
Test 1
Input
14 3
1 3
2 3
3 4
7 4
4 5
5 6
10 11
9 11
8 11
11 5
12 13
13 6
14 6
Output
6
Note
