| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2010 - Make it Smooth | 36 | 6.5s | 1G |
| 2 | Google Code Jam 2010 - Number Game | 41 | 20.0s | 1G |
| 3 | Google Code Jam 2010 - Rotate | 23 | 1.0s | 1G |
Bạn có một mảng một chiều gồm \(N\) điểm ảnh (pixel). Mỗi điểm ảnh có một giá trị, được biểu diễn bằng một số nguyên từ \(0\) đến \(255\). Khoảng cách giữa hai điểm ảnh là giá trị tuyệt đối của hiệu giữa hai giá trị của chúng.
Bạn có thể thực hiện mỗi thao tác sau đây không giới hạn số lần:
Mảng được gọi là mượt (smooth) nếu bất kỳ hai điểm ảnh lân cận nào cũng có khoảng cách tối đa là \(M\). Hãy tìm chi phí tối thiểu để thực hiện một chuỗi các thao tác làm cho mảng trở nên mượt.
Lưu ý: Mảng rỗng — mảng không chứa điểm ảnh nào — được coi là mượt.
Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(T\). \(T\) bộ test theo sau, mỗi bộ gồm hai dòng. Dòng đầu tiên có dạng "\(D\) \(I\) \(M\) \(N\)", dòng tiếp theo chứa \(N\) số \(a_i\): giá trị của các điểm ảnh từ trái sang phải.
Với mỗi bộ test, xuất một dòng chứa "Case #x: y", trong đó x là số thứ tự bộ test (bắt đầu từ 1) và y là chi phí tối thiểu để làm cho mảng đầu vào trở nên mượt.
Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 12/36 | 33,33% |
| Test Set 2 | 24/36 | 66,67% |
Ví dụ 1
2
6 6 2 3
1 7 5
100 1 5 3
1 50 7
Case #1: 4
Case #2: 17
Trong Case #1, giảm giá trị 7 xuống 3 tốn chi phí 4 và là giải pháp rẻ nhất. Trong Case #2, việc xóa là cực kỳ tốn kém; sẽ rẻ hơn nếu chèn các phần tử để mảng cuối cùng của bạn trông giống như [1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 50, 45, 40, 35, 30, 25, 20, 15, 10, 7].
Google Code Jam 2010, Vòng 1A, bài Make it Smooth.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Arya và Bran chơi với hai số nguyên dương \(A,B\) trên bảng, Arya đi trước. Mỗi lượt, người chơi thay \(A\) bằng \(A-kB\), hoặc \(B\) bằng \(B-kA\), với số nguyên dương \(k\). Người đầu tiên làm một số giảm xuống 0 hoặc âm sẽ thua.
Ví dụ từ \((12,51)\): Arya đổi 51 thành \(51-3\cdot12=15\); Bran đổi 15 thành 3; Arya đổi 12 thành 3; Bran buộc đổi một số 3 thành 0 và thua.
Gọi \((A,B)\) là thế thắng nếu Arya có thể chắc chắn thắng bất kể Bran chơi thế nào. Cho \(A_1,A_2,B_1,B_2\), hãy đếm số thế thắng với \(A_1\le A\le A_2\) và \(B_1\le B\le B_2\).
Dòng đầu là \(T\). Mỗi test gồm bốn số \(A_1,A_2,B_1,B_2\).
In Case #x: y, với \(y\) là số thế thắng trong hình chữ nhật đã cho.
Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 16/41 | 39,02% |
| Test Set 2 | 25/41 | 60,98% |
Ví dụ 1
3
5 5 8 8
11 11 2 2
1 6 1 6
Case #1: 0
Case #2: 1
Case #3: 20
Google Code Jam 2010, Vòng 1A, bài Number Game.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Trong trò Join-\(K\), quân đỏ và xanh rơi vào bảng \(N\times N\) dựng đứng, tới ô trống thấp nhất trong cột.
- Legal Position -
.......
.......
.......
....R..
...RB..
..BRB..
.RBBR..
- Illegal Position -
.......
.......
.......
.......
Bad -> ..BR...
...R...
.RBBR..
. là ô trống, R đỏ, B xanh. Hình trái hợp lệ; hình phải không hợp lệ vì quân được đánh dấu chưa rơi xuống ô trống bên dưới.
Người chơi thắng nếu có ít nhất \(K\) quân cùng màu liên tiếp theo ngang, dọc hoặc chéo:
- Four in a row -
R RRRR R R
R R R
R R R
R R R
Bạn bí mật xoay bảng 90 độ theo chiều kim đồng hồ. Sau khi xoay hoàn toàn, trọng lực làm quân rơi xuống:
- Start -
.......
.......
.......
...R...
...RB..
..BRB..
.RBBR..
- Rotate -
.......
R......
BB.....
BRRR...
RBB....
.......
.......
- Gravity -
.......
.......
.......
R......
BB.....
BRR....
RBBR...
Chỉ được xoay một lần; trọng lực chỉ tác dụng sau khi xoay xong; chỉ xét người thắng sau khi quân rơi xong. Hãy xác định màu nào tạo được \(K\) quân liên tiếp.
Dòng đầu là \(T\). Mỗi test bắt đầu bằng \(N,K\), rồi \(N\) dòng dài đúng \(N\) mô tả một thế hợp lệ; ban đầu chưa màu nào có \(K\) quân liên tiếp.
In Case #x: y, với y là Red, Blue, Neither hoặc Both.
Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.
| Phân nhóm | Điểm Google Code Jam | Tỷ lệ điểm của bài |
|---|---|---|
| Test Set 1 | 11/23 | 47,83% |
| Test Set 2 | 12/23 | 52,17% |
Ví dụ 1
4
7 3
.......
.......
.......
...R...
...BB..
..BRB..
.RRBR..
6 4
......
......
.R...R
.R..BB
.R.RBR
RB.BBB
4 4
R...
BR..
BR..
BR..
3 3
B..
RB.
RB.
Case #1: Neither
Case #2: Both
Case #3: Red
Case #4: Blue
Google Code Jam 2010, Vòng 1A, bài Rotate.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.