| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2009 - Alphabetomials | 24 | 1.0s | 1G |
| 2 | Google Code Jam 2009 - EZ-Sokoban | 17 | 1.5s | 1G |
| 3 | Google Code Jam 2009 - Football Team | 27 | 1.0s | 1G |
| 4 | Google Code Jam 2009 - Interesting Ranges | 32 | 1.0s | 1G |
Như chúng ta đều biết, có một sự khác biệt lớn giữa đa thức bậc 4 và đa thức bậc 5. Câu hỏi về việc không tồn tại công thức nghiệm tổng quát cho đa thức bậc 5 đã tạo ra lý thuyết Galois nổi tiếng, mà theo như tác giả thấy, không có liên quan gì đến bài toán của chúng ta ở đây.
Chúng ta chỉ xem xét các đa thức nhiều biến có bậc tối đa là 4, trên 26 biến, được đại diện bởi tập hợp 26 chữ cái tiếng Anh viết thường. Dưới đây là một đa thức như vậy:
aber+aab+c
Cho một chuỗi \(s\), chúng ta tính giá trị của đa thức trên chuỗi đó. Việc tính toán cho kết quả \(p(S)\) như sau: Mỗi biến được thay thế bằng số lần xuất hiện của chữ cái đó trong \(S\).
Ví dụ, lấy đa thức ở trên và giả sử \(S\) = "abracadabra edgar". Có sáu chữ 'a', hai chữ 'b', một chữ 'c', một chữ 'e', và ba chữ 'r'. Vì vậy
p(S) = 6 * 2 * 1 * 3 + 6 * 6 * 2 + 1 = 109.
Cho một từ điển gồm các từ phân biệt chỉ chứa các chữ cái viết thường, chúng ta gọi một chuỗi \(S\) là một d-cụm từ (d-phrase) nếu
S = "S1 S2 S3 ... Sd",
trong đó \(S_i\) là bất kỳ từ nào trong từ điển, với \(1 \le i \le d\). Nghĩa là, \(S\) có dạng \(d\) từ trong từ điển ngăn cách bởi các khoảng trắng. Cho một số K \(\le 10\), nhiệm vụ của bạn là, với mỗi \(1 \le d \le \mathbf{K}\), hãy tính tổng của \(p(S)\) trên tất cả các \(d\)-cụm từ. Vì kết quả có thể rất lớn, bạn được yêu cầu tính số dư khi chia kết quả cho 10009.
Dòng đầu tiên chứa số lượng bộ test T. T bộ test tiếp theo. Định dạng của mỗi bộ test là:
Một dòng chứa biểu thức \(p\) cho đa thức nhiều biến, như mô tả bên dưới, sau đó là một khoảng trắng, tiếp theo là một số nguyên K.
Một dòng với một số nguyên n, số lượng từ trong từ điển.
Sau đó là n dòng, mỗi dòng chứa một từ, chỉ gồm các chữ cái viết thường. Không có từ nào bị lặp lại trong cùng một bộ test.
Chúng ta luôn viết đa thức dưới dạng tổng của các số hạng; mỗi số hạng là tích của các biến. Chúng ta viết \(a^t\) đơn giản là \(t\) chữ \(a\) viết liền nhau. Ví dụ, \(a^2b\) được viết là \(aab\). Các biến trong mỗi số hạng luôn được sắp xếp không giảm theo thứ tự từ điển.
Với mỗi bộ test, in ra một dòng có dạng
Case #X: sum1 sum2 ... sumK
trong đó \(X\) là số thứ tự bộ test bắt đầu từ 1, và \(sum_i\) là tổng của \(p(S)\), với \(S\) chạy qua tất cả các \(i\)-cụm từ, modulo 10009.
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 | 4/24 | 16,67% |
| Test Set 2 | 20/24 | 83,33% |
Ví dụ 1
2
ehw+hwww 5
6
where
when
what
whether
who
whose
a+e+i+o+u 3
4
apple
orange
watermelon
banana
Case #1: 15 1032 7522 6864 253
Case #2: 12 96 576
Google Code Jam 2009, Vòng 3, bài Alphabetomials.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Sokoban là trò chơi Nhật Bản, tên gọi có nghĩa là “người giữ kho”. Bạn phải đẩy các thùng tới ô đích. Muốn đẩy một thùng, cả ô phía sau (nơi đứng) và ô phía trước nó phải trống. Mỗi lần chỉ đẩy một thùng; không được đẩy thùng hay đứng ra ngoài bàn.
Trong hình, thùng 1 đẩy được theo bốn hướng; thùng 2 chỉ theo đông hoặc tây vì ô phía nam không trống; thùng 3 không đẩy được; thùng 4 chỉ theo đông hoặc tây vì có tường phía nam.
Sokoban đã được chứng minh là một bài toán đầy đủ PSPACE, nhưng ở đây ta xét một biến thể dễ hơn. Sokoban đã được chứng minh là một bài toán đầy đủ PSPACE, nhưng ở đây ta xét một biến thể dễ hơn. Ở biến thể này, các thùng chứa nam châm mạnh và gần như luôn phải dính nhau. Trạng thái ổn định nghĩa là mọi thùng liên thông qua cạnh. Nếu một lần đẩy làm chúng mất liên thông, ta vào chế độ nguy hiểm và lần đẩy kế tiếp bắt buộc khôi phục liên thông.
Nếu đẩy thùng phía bắc sang tây, ta vào chế độ nguy hiểm:
Sau đó có thể đẩy chính thùng ấy xuống nam để ổn định lại:
Cho bàn, cấu hình ban đầu và cấu hình đích. Hãy tìm số lần đẩy thùng ít nhất, hoặc kết luận không thể giải. Cả cấu hình đầu và cuối đều không nguy hiểm. Người giữ kho có thể nhảy tức thời tới bất kỳ ô trống nào.
Dòng đầu là \(T\). Mỗi test bắt đầu bằng \(R,C\), rồi \(R\) dòng, mỗi dòng \(C\) ký tự: . ô trống, # tường, x đích, o thùng, w vừa là thùng vừa là đích. Số thùng bằng số đích.
In Case #X: K, với \(K\) là số lần đẩy nhỏ nhất, hoặc -1 nếu không thể giải.
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/17 | 41,18% |
| Test Set 2 | 10/17 | 58,82% |
Ví dụ 1
4
5 4
....
#..#
#xx#
#oo#
#..#
7 7
.######
.x....#
.x....#
..#oo.#
..#...#
.######
.######
4 10
##########
#.x...o..#
#.x...o..#
##########
3 4
.#x.
.ow.
....
Case #1: 2
Case #2: 8
Case #3: 8
Case #4: 2
Google Code Jam 2009, Vòng 3, bài EZ-Sokoban.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Một đội bóng sẽ đứng thành các hàng để chụp ảnh. Vị trí của mỗi cầu thủ được xác định bởi hai số nguyên \(x\) và \(y\), trong đó \(y\) là số thứ tự của hàng, và \(x\) là khoảng cách của cầu thủ đó tính từ mép trái của hàng. Các giá trị \(x\) đều khác nhau.
Để bức ảnh trở nên thú vị hơn, bạn muốn đảm bảo rằng những cầu thủ đứng gần nhau phải mặc áo màu khác nhau. Để thực hiện điều này, bạn đặt ra quy tắc sau:
Với mỗi cầu thủ \(P\):
Nói một cách chính xác hơn, nếu có hai cầu thủ ở vị trí \((x_1, y_1)\) và \((x_2, y_2)\), với \(x_1 < x_2\), thì hai cầu thủ đó phải có màu áo khác nhau nếu:
Hãy tìm số lượng màu áo tối thiểu cần thiết để có thể thực hiện được điều này.
Dòng đầu tiên của dữ liệu vào chứa một số nguyên \(T\), là số lượng bộ dữ liệu. Mỗi bộ dữ liệu bắt đầu bằng một dòng chứa số nguyên \(N\), số lượng cầu thủ, tiếp theo là \(N\) dòng có dạng:
x y
Với mỗi bộ dữ liệu, hãy xuất ra:
Case #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 | 8/27 | 29,63% |
| Test Set 2 | 19/27 | 70,37% |
Ví dụ 1
3
3
10 10
8 15
12 7
5
1 1
2 1
3 1
4 1
5 1
3
1 1
2 2
3 1
Case #1: 1
Case #2: 2
Case #3: 3
Google Code Jam 2009, Vòng 3, bài Football Team.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Một số nguyên dương được gọi là số đối xứng (palindrome) nếu biểu diễn thập phân của nó (không có các chữ số 0 ở đầu) là một chuỗi đối xứng (đọc từ trái sang phải hay từ phải sang trái đều giống nhau). Ví dụ: các số 5, 77, 363, 4884, 11111, 12121 và 349943 là các số đối xứng.
Một đoạn các số nguyên được gọi là thú vị nếu nó chứa một số lượng chẵn các số đối xứng. Đoạn \([L, R]\) với \(L \le R\) được định nghĩa là dãy các số nguyên từ \(L\) đến \(R\) (bao gồm cả hai đầu): \((L, L+1, L+2, \dots, R-1, R)\). \(L\) và \(R\) lần lượt là số đầu tiên và số cuối cùng của đoạn.
Đoạn \([L_1, R_1]\) được gọi là đoạn con của \([L, R]\) nếu \(L \le L_1 \le R_1 \le R\). Nhiệm vụ của bạn là xác định xem có bao nhiêu đoạn con thú vị của \([L, R]\).
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ộ test nằm trên một dòng chứa hai số nguyên dương L và R (theo thứ tự đó), cách nhau bởi một khoảng trắng.
Với mỗi bộ test, xuất ra một dòng. Dòng đó phải chứa "Case #x: y", trong đó x là số thứ tự bộ test (bắt đầu từ 1) và y là số lượng đoạn con thú vị của \([L, R]\), lấy modulo \(1000000007\).
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/32 | 28,13% |
| Test Set 2 | 23/32 | 71,87% |
Ví dụ 1
3
1 2
1 7
12 110
Case #1: 1
Case #2: 12
Case #3: 2466
Google Code Jam 2009, Vòng 3, bài Interesting Ranges.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.