| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | USACO 2024 US Open Contest, Platinum, Identity Theft | 100 (p) | 3.0s | 512M |
| 2 | USACO 2024 US Open Contest, Platinum, Splitting Haybales | 100 (p) | 2.0s | 0B |
| 3 | USACO 2024 US Open Contest, Platinum, Activating Robots | 100 (p) | 2.0s | 256M |
Anh nông dân John có \(N\) con bò, mỗi con bò có một mã định danh khác nhau được viết dưới dạng chuỗi bit (chuỗi được tạo thành từ 2 loại kí tự '0' và '1'). Bessie là cô bò lớn tuổi nhất, cô nhớ mã định danh của tất cả con bò khác và thích đi lại trong trang trại để hỏi về mã định danh của chúng.
Khi một con bò được hỏi về mã định danh, nó sẽ bắt đầu trả lời chuỗi bit định danh của mình, tuy nhiên nó có thể quên phần sau của chuỗi và dừng lại trước khi trả lời đủ mã định danh của mình. Mỗi khi Bessie nghe được một chuỗi bit, nếu đó không phải là mã định danh của bất kỳ con bò nào trên trang trại, thì cô ấy sẽ nhún vai và đi khỏi. Tuy nhiên, nếu đó vô tình là mã định danh của một con bò khác mà không phải con bò cô ấy đang hỏi, thì cô ấy sẽ cho rằng đã xảy ra hành vi đánh cắp danh tính và đưa trang trại vào tình trạng phong tỏa. Lưu ý rằng điều này có thể xảy ra ngay cả khi con bò nói đầy đủ mã định danh của nó.
John cảm thấy mệt mỏi vì tình trạng này nên muốn ngăn chặn nó xảy ra. Anh sẵn sàng thay đổi mã định danh của các con bò bằng cách thêm một số bit vào đó. Trong một giây, anh có thể thêm một bit vào cuối mã định danh của bất kỳ con bò nào. Hãy tính toán thời gian ít nhất để anh ngăn chặn được việc phong tỏa trang trại.
Test 1
3
1
1
1
5
Chúng ta có thể ngăn chặn khóa trang trại trong \(5\) giây bằng cách thêm \('0'\) vào mã định danh đầu tiên, \('10'\) vào mã định danh thứ hai và \('11'\) vào mã định danh thứ ba, tạo thành các mã định danh \('10'\), \("110'\) và \('111'\).
Điều này không thể được thực hiện trong \(4\) giây hoặc ít hơn. Ví dụ, nếu bạn để nguyên các mã định danh, thì cả ba con bò đều có cùng mã định danh \('1'\), vì vậy khi Bessie nghe thấy, nó sẽ luôn là mã định danh của một con bò khác.
Một ví dụ khác, nếu bạn chỉ mất \(2\) giây để thêm \('0'\) vào mã định danh thứ hai và \('1'\) vào mã định danh thứ ba, thì các mã định danh là \('1'\), \('10'\) và \('11'\), với con bò thứ hai và thứ ba, khi nói mã định danh của chúng, có thể dừng ở giữa và chỉ nói \('1'\), đó sẽ là mã định danh của con bò đầu tiên.
Test 2
3
1
11
111
2
Test 3
3
1
1
11
4
Test 4
5
0
01
0011
010
01
6
Test 5
14
0
1
1
0
1
0
1
1
1
1
1
0
0
1
41
Nông dân John muốn chia đều cỏ giữa hai con bò yêu thích của mình là Bessie và Elsie. Anh có \(N\) (\(1 \leq N \leq 2 \times 10^5\)) bó cỏ được sắp xếp theo thứ tự không tăng dần, trong đó bó cỏ thứ \(i\) có \(a_i\) cọng cỏ (\(2 \times 10^5 \geq a_1 \geq a_2 \geq ... \geq a_N \geq1\)).
Nông dân John đang nghĩ đến chuyện chia những bó cỏ một cách lần lượt cho hai con bò, cụ thể như sau:
Bạn được cho Q truy vấn (\(1 \leq Q \leq 2 \times 10^5\)), mỗi truy vấn gồm 3 số nguyên \(l, r, x\) (\(1 \leq l \leq r \leq N, |x| \leq 10^9\)). Với mỗi truy vấn, bạn cần tìm xem Bessie sẽ có nhiều hơn Elsie bao nhiêu cọng cỏ, biết Bessie ban đầu có nhiều hơn Elsie \(x\) cọng cỏ. Lưu ý rằng giá trị này âm nếu Elsie có nhiều cỏ hơn Bessie.
Test 1
2
3 1
15
1 1 -2
1 1 -1
1 1 0
1 1 1
1 1 2
1 2 -2
1 2 -1
1 2 0
1 2 1
1 2 2
2 2 -2
2 2 -1
2 2 0
2 2 1
2 2 2
1
2
3
-2
-1
0
1
2
-1
0
-1
0
1
0
1
Test 2
5
4 4 3 1 1
7
1 1 20
1 2 20
1 5 20
1 1 0
1 5 0
1 4 0
3 5 2
16
12
7
4
1
2
1
Bạn và một robot ban đầu đứng tại điểm \(0\) trên một vòng tròn có chu vi \(L\) (\(1 \leq L \leq 10^9\)). Bạn có thể di chuyển liên tục theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ trên vòng tròn với tốc độ \(1\) đơn vị trên giây. Tất cả các chuyển động trong bài toán này là liên tục.
Mục tiêu của bạn là đặt thêm \(R-1\) robot sao cho đến cuối cùng, mọi cặp robot liền kề cách nhau \(L/R\) đơn vị (\(2 \leq R \leq 20\), \(R\) chia hết cho \(L\)). Có \(N\) (\(1 \leq N \leq 10^5\)) điểm kích hoạt, điểm thứ \(i\) cách điểm \(0\) một khoảng \(a_i\) theo chiều ngược kim đồng hồ (\(0 < a_i < L\)). Nếu bạn đang ở tại một điểm kích hoạt, bạn có thể đặt một robot tại đó. Tất cả các robot (kể cả robot ban đầu) di chuyển ngược chiều kim đồng hồ liên tục với tốc độ \(1\) đơn vị trên \(K\) giây (\(1 \leq K \leq 10^9\)).
Hãy tính toán thời gian tối thiểu cần thiết để đạt được mục tiêu.
Test 1
10 2 1 2
6
22
Chúng ta có thể đến điểm kích hoạt tại \(6\) trong \(4\) giây bằng cách đi theo chiều kim đồng hồ. Lúc này, robot ban đầu sẽ ở vị trí \(2\). Chờ thêm \(18\) giây nữa cho đến khi robot ban đầu ở vị trí \(1\). Bây giờ chúng ta có thể đặt một robot để ngay lập tức hoàn thành mục tiêu.
Điều này không thể được thực hiện trong \(4\) giây hoặc ít hơn. Ví dụ, nếu bạn để nguyên các mã định danh, thì cả ba con bò đều có cùng mã định danh \('1'\), vì vậy khi Bessie nghe thấy, nó sẽ luôn là mã định danh của một con bò khác.
Một ví dụ khác, nếu bạn chỉ mất \(2\) giây để thêm \('0'\) vào mã định danh thứ hai và \('1'\) vào mã định danh thứ ba, thì các mã định danh là \('1'\), \('10'\) và \('11'\), với con bò thứ hai và thứ ba, khi nói mã định danh của chúng, có thể dừng ở giữa và chỉ nói \('1'\), đó sẽ là mã định danh của con bò đầu tiên.
Test 2
10 2 1 2
7
4
Test 3
32 4 5 2
0 23 12 5 11
48
Test 4
24 3 1 2
16
48