| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | USACO 2022 US Open Contest, Gold, Apple Catching | 100 (p) | 2.0s | 256M |
| 2 | USACO 2022 US Open Contest, Gold, Pair Programming | 100 (p) | 2.0s | 256M |
| 3 | USACO 2022 US Open Contest, Gold, Balancing a Tree | 100 (p) | 2.0s | 256M |
Trời ơi!!! Một cơn mưa táo!! Đến một lúc nào đó, các quả táo này sẽ rơi xuống trục số. Và cũng đến một lúc nào đó, các chú bò của nông dân John sẽ đến trục số và bắt đầu hứng táo.
Nếu như một quả táo chạm vào trục số mà không được hứng, nó sẽ biến mất mãi mãi. Ngược lại, nếu như một chú bò đến kịp lúc quả táo chạm đất, chú ta sẽ hứng được quả táo đó. Biết rằng mỗi chú bò chỉ có thể di chuyển một đơn vị khoảng cách mỗi giây và một khi đã hứng được một quả táo, chú ta sẽ đi ra khỏi trục số ngay lập tức.
Hãy cho biết số táo nhiều nhất hứng được là bao nhiêu nếu như các chú bò hứng một cách tối ưu!
Test 1
5
2 5 10 100
2 6 0 3
2 8 10 7
1 2 4 5
1 4 7 6
10
Trong ví dụ này, không có quả táo nào được hứng trong \(100\) quả táo rơi trúng trục số tại thời điểm \(t_i = 5\). Đây là một cách để có thể thu hoạch được \(10\) quả táo:
Test 2
5
2 5 10 100
2 6 0 3
2 8 11 7
1 2 4 5
1 4 7 6
9
Trong ví dụ này, cũng không quả táo nào được hứng trong \(100\) quả táo xuất hiện vào thời điểm \(t = 5\). Thêm nữa, không một chú bò nào xuất hiện tại thời điểm \(t = 2\) hứng được táo xuất hiện tại thời điểm \(t = 8\). Đây là một cách để thu hoạch được \(9\) quả táo:
Một chương trình bao gồm một chuỗi lệnh, mỗi lệnh thuộc một trong các dạng sau:
Kết quả của một chương trình là biểu thức thu được sau khi áp dụng từng lệnh theo thứ tự, bắt đầu với \(0\). Ví dụ, kết quả của chương trình \([\times 3,+x, +y, \times 2, +z]\) là biểu thức \((0\times 3+x +y)\times 2+z=2\times x+2\times y+z\) . Các chương trình khác nhau có thể tạo ra các biểu thức giống nhau; ví dụ, \([+w,\times 0,+y,+x,\times 2,+z,\times 1]\) cũng sẽ tạo ra biểu thức \(2\times x+2\times y+z\).
Bessie và Elsie mỗi người có một chương trình gồm \(N (1\leq N \leq 2000)\) lệnh. Họ sẽ sắp xếp các lệnh này để tạo ra một chương trình mới có độ dài \(2N\). Lưu ý rằng có \(\frac {(2N)!} {N! \times N!}\) cách để thực hiện việc này, nhưng không phải tất cả các trường hợp sẽ tạo ra kết quả khác nhau.
Đếm số biểu thức phân biệt có thể được tạo ra bằng cách sắp xếp các lệnh trên, kết quả \(\% (1e9+7)\).
Mỗi bộ test chứa \(T(1 \leq T \leq 10)\) test con. Dữ liệu đầu vào đảm bảo rằng tổng \(N\) trên tất cả test con không vượt quá \(2000\).
Test 1
4
1
0
1
3
12+
+02
3
0++
++9
4
5+++
+6+1
1
3
9
9
Đối với test đầu tiên, hai chương trình có thể tạo ra là \([×1,×0]\) và \([×0,×1]\). Cả hai sẽ tạo ra biểu thức \(0\).
Đối với test thử thứ hai, các chương trình \([×1,×2,+x]\) và \([+y,×0,×2]\) có thể tạo ra một trong các biểu thức \(0\), \(x\) hoặc \(2×x\) .
Nông dân John đã tiến hành một nghiên cứu về sự tiến hóa của các giống bò khác nhau. Kết quả là một cây có gốc với \(N\) (\(1 \leq N \leq 10^5\)) nút đánh số từ \(1\) đến \(N\), mỗi nút tương ứng với một giống bò. Với mỗi \(i \in [2, N]\), nút cha của \(i\) là nút \(p_i\) (\(1 \leq p_i < i\)), nghĩa là giống \(i\) tiến hóa từ giống \(p_i\). Nút \(j\) được gọi là tổ tiên của nút \(i\) nếu \(j = p_i\) hoặc \(j\) là tổ tiên của \(p_i\).
Mỗi nút \(i\) tương ứng với giống bò được gán số nguyên \(s_i\). Sự "mất cân bằng" của cây là giá trị lớn nhất của \(|s_i - s_j|\) trên tất cả các cặp nút \((i, j)\) với \(j\) là tổ tiên của \(i\).
Nông dân John không biết giá trị chính xác của \(s_i\) của mỗi giống, nhưng ông biết giới hạn dưới và giới hạn trên của những giá trị này. Công việc của bạn là gán giá trị nguyên của \(s_i \in [l_i, r_i]\) (\(0 \leq l_i \leq r_i \leq 10^9\)) cho mỗi nút sao cho sự mất cân bằng của cây là nhỏ nhất.
Với mỗi bộ dữ liệu, in ra \(1\) hoặc \(2\) dòng dựa vào giá trị của \(B\):
Test 1
3 0
3
1 1
0 100
1 1
6 7
5
1 2 3 4
6 6
1 6
1 6
1 6
5 5
3
1 1
0 10
0 1
9 10
3
1
4
Đối với test đầu tiên, độ mất cân bằng nhỏ nhất là \(3\). Một cách để đạt được là \([s_1, s_2, s_3] = [4, 1, 7]\).
Test 2
3 1
3
1 1
0 100
1 1
6 7
5
1 2 3 4
6 6
1 6
1 6
1 6
5 5
3
1 1
0 10
0 1
9 10
3
3 1 6
1
6 5 5 5 5
4
5 1 9
Đối với test đầu tiên, độ mất cân bằng nhỏ nhất là \(3\). Một cách để đạt được là \([s_1, s_2, s_3] = [3, 1, 6]\).