| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2008 - Bus Stops | 34 | 7.0s | 1G |
| 2 | Google Code Jam 2008 - Painting a Fence | 20 | 1.0s | 1G |
| 3 | Google Code Jam 2008 - Rainbow Trees | 24 | 1.0s | 1G |
| 4 | Google Code Jam 2008 - Scaled Triangle | 22 | 1.0s | 1G |
Tại Thành phố Thứ nhất của Sao Hỏa có \(N\) trạm xe buýt, tất cả được sắp xếp trên một đường thẳng có chiều dài \(N-1\) km. Thị trưởng thích mọi thứ đơn giản, vì vậy ông đã đánh số các trạm xe buýt từ \(1\) đến \(N\), và các trạm liền kề cách nhau đúng \(1\) km.
Cũng có \(K\) chiếc xe buýt trong thành phố. Thị trưởng phải lập kế hoạch lịch trình xe buýt và ông muốn biết có bao nhiêu cách để thực hiện điều đó. Con số này có thể rất lớn. May mắn thay, có một vài ràng buộc:
Hãy giúp thị trưởng đánh giá số lượng lịch trình. Tuy nhiên, đừng đưa cho ông ấy tin quá xấu (quá nhiều lịch trình), vì vậy chỉ cần xuất ra số lượng thực tế theo modulo \(30031\).
Dòng đầu tiên trong tệp đầu vào là số lượng bộ test \(T\).
Mỗi dòng trong \(T\) dòng tiếp theo chứa 3 số nguyên cách nhau bởi một khoảng trắng: \(N\), \(K\) và \(P\).
Đối với mỗi bộ test, hãy xuất ra số cách lập kế hoạch lịch trình xe buýt (modulo \(30031\)) theo định dạng Case #t: [số cách modulo 30031] với t là số thứ tự của bộ test, bắt đầu từ 1.
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 | 8/34 | 23,53% |
| Test Set 2 | 26/34 | 76,47% |
Ví dụ 1
3
10 3 3
5 2 3
40 4 8
Case #1: 1
Case #2: 3
Case #3: 7380
Hãy gọi tên các xe buýt là: A, B, C...
Google Code Jam 2008, Vòng bán kết EMEA, bài Bus Stops.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Bạn cần thuê một số người để sơn một hàng rào. Hàng rào gồm \(10000\) đoạn liên tiếp, được đánh số từ \(1\) đến \(10000\).
Bạn nhận được một số lời đề nghị từ các thợ sơn. Mỗi thợ sơn đề nghị sơn một đoạn liên tiếp của hàng rào bằng một màu cụ thể. Bạn cần chấp nhận một tập hợp các lời đề nghị sao cho:
Nếu có thể thỏa mãn hai yêu cầu này, hãy tìm số lượng lời đề nghị tối thiểu mà bạn phải chấp nhận.
Với mỗi bộ dữ liệu:
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 | 7/20 | 35% |
| Test Set 2 | 13/20 | 65% |
Ví dụ 1
5
2
BLUE 1 5000
RED 5001 10000
3
BLUE 1 6000
RED 2000 8000
WHITE 7000 10000
4
BLUE 1 3000
RED 2000 5000
ORANGE 4000 8000
GREEN 7000 10000
2
BLUE 1 4000
RED 4002 10000
3
BLUE 1 6000
RED 4000 10000
ORANGE 3000 8000
Case #1: 2
Case #2: 3
Case #3: IMPOSSIBLE
Case #4: IMPOSSIBLE
Case #5: 2
Giải thích ví dụ:
Google Code Jam 2008, Vòng bán kết EMEA, bài Painting a Fence.
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 lý thuyết đồ thị, một cây là một đồ thị đơn vô hướng, liên thông và không có chu trình. Một cây có \(n\) nút luôn có \(n - 1\) cạnh.
Một đường đi trong cây là một dãy các cạnh phân biệt liên tiếp nhau (mỗi cặp cạnh liên tiếp trong đường đi chia sẻ chung một đỉnh).
Xét một cây có \(n\) đỉnh và \(n - 1\) cạnh. Bạn có thể tô mỗi cạnh bằng một trong \(k\) màu.
Một cách tô màu các cạnh được gọi là tô màu cầu vồng (rainbow coloring) nếu trong mọi đường đi có độ dài 2 hoặc 3 cạnh, màu của các cạnh đều khác nhau. (Nghĩa là, cứ hai cạnh liên tiếp bất kỳ phải có màu khác nhau, và cứ ba cạnh liên tiếp bất kỳ phải có màu khác nhau).
Cho một cây và số lượng màu \(k\), hãy tìm số cách tô màu cầu vồng modulo \(1000000009\).
Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(C\). Sau đó, với mỗi bộ trong số \(C\) bộ test:
Với mỗi bộ test, xuất một dòng. Dòng đó phải chứa "Case #\(X\): \(Y\)", trong đó \(X\) là số thứ tự của bộ test (bắt đầu từ 1) và \(Y\) là đáp án cho bộ test đó.
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 | 9/24 | 37,5% |
| Test Set 2 | 15/24 | 62,5% |
Ví dụ 1
2
4 10
1 2
1 3
1 4
5 3
1 2
2 3
3 4
4 5
Case #1: 720
Case #2: 6
Trong trường hợp đầu tiên, cây có bốn nút. Có các cạnh từ một nút đến mỗi nút trong ba nút còn lại. Mỗi cặp cạnh này đều kề nhau, vì vậy để có một cách tô màu cầu vồng, tất cả các cạnh phải có màu khác nhau. Do đó có \(10 \times 9 \times 8 = 720\) cách tô màu cầu vồng.
Trong trường hợp thứ hai, bản thân cây là một đường đi gồm 4 cạnh và có 3 màu. Ba cạnh đầu tiên phải có màu khác nhau, vì vậy có \(3 \times 2 \times 1\) cách tô màu cho chúng, và sau đó chỉ còn một lựa chọn cho cạnh thứ tư, do đó có 6 cách tô màu cầu vồng.
Google Code Jam 2008, Vòng bán kết EMEA, bài Rainbow Trees.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Bạn được cho hai bức hình hình tam giác. Bức hình thứ hai là một phiên bản đã được dịch chuyển, xoay và thay đổi tỉ lệ của bức hình thứ nhất. Hai tam giác này được đặt trên bàn, với tam giác thứ hai nằm hoàn toàn bên trong (có thể chạm vào biên của) tam giác thứ nhất. Tam giác thứ hai luôn được thu nhỏ theo một tỉ lệ \(S\) nằm trong khoảng \(0 < S < 1\).
Bạn cần xử lý hình ảnh và tìm một điểm trong bức hình trùng với chính điểm đó trong phiên bản thu nhỏ. Nếu có nhiều hơn một giải pháp, bạn có thể trả về bất kỳ điểm nào. Nếu không có giải pháp, hãy in "No Solution" cho trường hợp đó.
Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(N\). Sau đó, với mỗi bộ test, sẽ có hai dòng, mỗi dòng chứa sáu số nguyên cách nhau bởi dấu cách -- tọa độ của một trong các tam giác -- theo định dạng "\(x_1\) \(y_1\) \(x_2\) \(y_2\) \(x_3\) \(y_3\)". Điểm \((x_1, y_1)\) trong tam giác thứ nhất tương ứng với cùng một góc của bức hình với điểm \((x_1, y_1)\) trong tam giác thứ hai, và tương tự cho \((x_2, y_2)\) và \((x_3, y_3)\).
Với mỗi bộ test, hãy xuất một dòng chứa "Case #\(x\): " theo sau là hai số thực biểu diễn tọa độ của điểm trùng nhau cách nhau bởi một dấu cách, hoặc chuỗi "No Solution". Các câu trả lời có sai số tương đối hoặc tuyệt đối không quá \(10^{-5}\) sẽ được coi là chính xác.
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 | 9/22 | 40,91% |
| Test Set 2 | 13/22 | 59,09% |
Ví dụ 1
2
0 0 0 2 2 0
0 0 0 1 1 0
10 0 0 10 0 0
3 3 1 1 3 1
Case #1: 0.000000 0.000000
Case #2: 2.692308 1.538462
Google Code Jam 2008, Vòng bán kết EMEA, bài Scaled Triangle.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.