| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | USACO 2026 - Arranging Cows | 100 (p) | 4.0s | 512M |
| 2 | USACO 2026 - Haybale Stacks | 100 (p) | 4.0s | 512M |
| 3 | USACO 2026 - Perfect Binary Trees | 100 (p) | 4.0s | 512M |
Bạn được cho một xâu bit \(s_{1\dots N}\) có độ dài \(N\) (\(2\le N\le 10^9\)). Trong một thao tác, bạn có thể đảo ngược đoạn \(s_{l\dots r}\) nếu các điều kiện sau được thỏa mãn:
Hãy tìm số thao tác ít nhất để đưa tất cả các ký tự \(1\) lên đầu xâu, hoặc cho biết điều đó là không thể. Nếu có thể, hãy đồng thời in ra số dãy thao tác đạt được số thao tác ít nhất này, lấy modulo \(10^9+7\).
Dòng đầu tiên chứa \(T\) (\(1\leq T\leq 2026\)), là số bộ test độc lập. Mỗi bộ test có định dạng như sau:
Xâu bit được cho dưới dạng nén. Dòng đầu tiên chứa \(R\), là số đoạn liên tiếp gồm các ký tự giống nhau trong xâu (\(2\le R\le 800\)), và ký tự đầu tiên của xâu (hoặc \(0\) hoặc \(1\)).
Dòng tiếp theo chứa \(R\) số nguyên cách nhau bởi dấu cách \(l_1,l_2,l_3,\ldots,l_R\) (\(0<l_i<10^9\)), là độ dài của các khối liên tiếp cực đại gồm các ký tự giống nhau trong \(s\). Đảm bảo rằng \(N=\sum_{i=1}^R l_i\le 10^9\).
Ngoài ra, đảm bảo rằng tổng \(R^2\) trên tất cả các bộ test không vượt quá \(1.5\cdot 10^6\).
Với mỗi bộ test, in ra số thao tác ít nhất để đưa tất cả các ký tự \(1\) lên đầu xâu, hoặc \(-1\) nếu điều đó là không thể, cùng với số dãy thao tác đạt được số thao tác ít nhất này lấy modulo \(10^9+7\).
Ví dụ 1
9
2 0
1 1
2 1
1 1
2 1
2 1
2 0
1 2
5 0
1 1 1 2 1
3 0
1 2 1
8 0
1 1 2 1 1 2 1 1
6 0
3 3 1 2 2 1
7 0
5 1 1 3 2 1 1
1 1
0 1
0 1
-1 0
2 1
-1 0
4 7
3 1
4 1
Đây là dãy hai thao tác cho bộ test thứ năm: \(010110\to 100110\to 111000\).
Ví dụ 2
5
2 1
1 1
4 1
1 1 1 1
6 1
1 1 1 1 1 1
8 1
1 1 1 1 1 1 1 1
10 1
1 1 1 1 1 1 1 1 1 1
0 1
1 1
2 1
3 3
4 9
Trong tất cả các bộ test này, số thao tác ít nhất bằng \(R/2-1\).
Dưới đây là cả ba dãy gồm ba thao tác có thể có cho bộ test thứ tư:
(1)
10101010
-> 11001010
-> 11001100
-> 11110000
(2)
10101010
-> 10110010
-> 10001110
-> 11110000
(3)
10101010
-> 10101100
-> 11001100
-> 11110000
USACO 2026 US Open, Open Division — Arranging Cows. Tác giả: Sujay Konda.
https://usaco.org/index.php?page=viewproblem2&cpid=1602
Lưu ý: Giới hạn thời gian của bài này là 2.5 giây.
Farmer John có \(N\) chồng kiện cỏ khô (\(1\leq N\leq 5\cdot 10^5\)), trong đó chồng thứ \(i\) chứa \(a_i\) kiện cỏ khô (\(1\leq a_i\leq 10^9\)). Ông muốn dọn hết các kiện cỏ này và có \(M\) con bò (\(1\leq M\leq 2500\)) sẵn sàng giúp đỡ. Nếu được thuê với chi phí \(c_i\) (\(1\leq c_i\leq 10^9\)), con bò thứ \(i\) sẽ lặp lại việc sau \(s_i\) lần (\(1\leq s_i\leq 100\)):
Với mỗi chồng, FJ muốn lấy đi toàn bộ các kiện cỏ trong đó. Ông sẽ làm việc này bằng cách lần lượt thuê các con bò (có thể thuê cùng một con bò nhiều lần) cho đến khi chồng trở nên rỗng. Hãy giúp FJ xác định chi phí nhỏ nhất để dọn hết từng chồng.
Dòng đầu tiên chứa \(T\) (\(1\le T\le 100\)), là số bộ test độc lập. Mỗi bộ test có định dạng như sau:
Dòng đầu tiên chứa một số nguyên \(N\). Dòng thứ hai chứa \(N\) số nguyên \(a_1,a_2,\dots,a_N\).
Dòng thứ ba chứa một số nguyên \(M\). Mỗi dòng trong \(M\) dòng tiếp theo chứa \(p_i,s_i,c_i\).
Đảm bảo rằng các con bò có thể lấy đi toàn bộ kiện cỏ trong mọi chồng. Ngoài ra, đảm bảo rằng tổng \(N\) trên tất cả các bộ test không vượt quá \(5\cdot 10^5\), và tổng \(M\) trên tất cả các bộ test không vượt quá \(2500\).
Với mỗi bộ test, in ra \(N\) số nguyên cách nhau bởi dấu cách, trong đó số nguyên thứ \(i\) là chi phí để lấy đi toàn bộ kiện cỏ trong chồng thứ \(i\).
Ví dụ 1
2
3
15 100 10
4
101 1 1
1 4 8
9 3 5
15 2 3
3
15 100 10
4
101 1 1
1 1 5
9 1 8
15 1 3
29 155 21
73 328 50
Bộ test thứ nhất: Với chồng cuối cùng có kích thước ban đầu là \(10\), ta có thể thuê con bò \(3\) một lần với chi phí \(5\); nó sẽ lấy đi hai kiện cỏ (không phải ba kiện, vì số kiện cỏ giảm xuống \(8\) sau khi kiện thứ hai được lấy đi). Sau đó, ta có thể thuê con bò \(2\) hai lần để lấy đi \(8\) kiện cỏ, khiến không còn kiện cỏ nào. Tổng chi phí là \(5+8+8=21\).
Bộ test thứ hai: Bộ test này thỏa mãn \(\max(s)=1\).
USACO 2026 US Open, Open Division — Haybale Stacks. Tác giả: Sujay Konda.
https://usaco.org/index.php?page=viewproblem2&cpid=1603
Lưu ý: Giới hạn bộ nhớ của bài này là 512MB, gấp đôi mức mặc định.
Một cây nhị phân hoàn hảo là một cây có gốc mà mỗi đỉnh không phải lá có đúng hai đỉnh con và tất cả các đỉnh lá cách gốc một khoảng bằng nhau.
Một cây nhị phân hoàn hảo không gốc là một cây không gốc mà khi chọn một trong các đỉnh của nó làm gốc, cây đó trở thành một cây nhị phân hoàn hảo.
Bessie có một cây gồm \(N\) đỉnh (\(1\le N\le 10^5\)). Hãy xác định số cách xóa một tập con các cạnh khỏi cây sao cho rừng thu được là một tập hợp các cây nhị phân hoàn hảo không gốc. Vì đáp án có thể rất lớn, hãy in kết quả lấy modulo \(10^9+7\).
Dòng đầu tiên chứa một số nguyên \(T\) (\(1\leq T\leq 100\)), là số bộ test độc lập.
Dòng đầu tiên của mỗi bộ test chứa một số nguyên \(N\).
Mỗi dòng trong \(N-1\) dòng tiếp theo của mỗi bộ test chứa hai số nguyên \(u_i\) và \(v_i\) (\(1\leq u_i,v_i\leq N\)), biểu thị một cạnh nối hai đỉnh \(u_i\) và \(v_i\).
Đảm bảo rằng trong mỗi bộ test, các cạnh đã cho tạo thành một cây gồm \(N\) đỉnh.
Ngoài ra, tổng \(N\) trên tất cả các bộ test không vượt quá \(2\cdot 10^5\).
Với mỗi bộ test, in ra một số nguyên duy nhất: số tập con các cạnh mà khi bị xóa sẽ tạo ra một rừng là tập hợp các cây nhị phân hoàn hảo không gốc, lấy modulo \(10^9+7\).
Ví dụ 1
3
6
1 2
3 2
4 6
5 6
6 2
3
1 2
3 2
7
2 1
2 3
1 6
1 7
3 4
3 5
8
2
14
Trong bộ test thứ nhất, Bessie có thể xóa bất kỳ tập cạnh nào sau đây để thu được một rừng gồm các cây nhị phân hoàn hảo:
Tập con đầu tiên tạo ra hai cây con có chiều cao \(1\), tập con cuối cùng tạo ra sáu cây con có chiều cao \(0\), còn các tập con khác tạo ra ba cây con có chiều cao \(0\) và một cây con có chiều cao \(1\).
USACO 2026 US Open, Open Division — Perfect Binary Trees. Tác giả: Avnith Vijayram.
https://usaco.org/index.php?page=viewproblem2&cpid=1604