| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2017 - Bathroom Stalls | 30 | 1.0s | 1G |
| 2 | Google Code Jam 2017 - Fashion Show | 35 | 1.0s | 1G |
| 3 | Google Code Jam 2017 - Oversized Pancake Flipper | 15 | 1.0s | 1G |
| 4 | Google Code Jam 2017 - Tidy Numbers | 20 | 1.0s | 1G |
Một nhà vệ sinh có \(N+2\) buồng nằm trên một hàng; hai buồng ngoài cùng luôn bị nhân viên bảo vệ chiếm, còn \(N\) buồng ở giữa dành cho người dùng.
Mỗi người bước vào đều cố chọn buồng xa người khác nhất theo quy tắc tất định sau. Với mỗi buồng trống \(S\), họ tính \(L_S\) và \(R_S\): số buồng trống nằm giữa \(S\) và buồng có người gần nhất tương ứng về bên trái và bên phải. Trước tiên họ chỉ xét các buồng tối đa hóa \(\min(L_S,R_S)\). Nếu chỉ còn một buồng thì chọn nó; nếu vẫn hòa, họ tối đa hóa \(\max(L_S,R_S)\); nếu vẫn còn nhiều lựa chọn, họ chọn buồng ngoài cùng bên trái.
Có \(K\) người sắp vào, từng người chọn xong trước khi người tiếp theo xuất hiện, và không ai rời đi. Khi người cuối cùng chọn buồng \(S\), hãy tìm \(\max(L_S,R_S)\) và \(\min(L_S,R_S)\).
Dòng đầu chứa số test \(T\). Mỗi dòng trong \(T\) dòng tiếp theo chứa hai số nguyên \(N,K\) như mô tả trên.
Với mỗi test, in Case #x: y z, trong đó x là số thứ tự test bắt đầu từ 1, \(y=\max(L_S,R_S)\) và \(z=\min(L_S,R_S)\) đối với buồng \(S\) mà người cuối cùng chọn.
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 | 5/30 | 16,67% |
| Test Set 2 | 10/30 | 33,33% |
| Test Set 3 | 15/30 | 50% |
Ví dụ 1
5
4 2
5 2
6 2
1000 1000
1000 1
Case #1: 1 0
Case #2: 1 0
Case #3: 1 1
Case #4: 0 0
Case #5: 500 499
Trong test 1, người đầu chọn buồng bên trái trong hai buồng giữa, tạo cấu hình O.O..O (O là có người, . là trống). Người thứ hai chọn buồng ngay bên phải, còn một phía có 1 buồng trống và phía kia không có buồng nào.
Trong test 2, người đầu chọn chính giữa, được O..O..O; người thứ hai chọn buồng ngoài cùng bên trái trong đoạn trống được ưu tiên.
Trong test 3, người đầu chọn buồng bên trái trong hai buồng giữa, được O..O...O; người thứ hai chọn chính giữa đoạn ba buồng trống liên tiếp.
Trong test 4, cuối cùng mọi buồng đều có người bất kể thứ tự lựa chọn.
Trong test 5, người đầu tiên và duy nhất chọn buồng bên trái trong hai buồng giữa.
Google Code Jam 2017, Vòng loại, bài Bathroom Stalls.
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 sắp tổ chức một buổi trình diễn ba phong cách thời trang trên sân khấu dạng lưới \(N\times N\). Mỗi ô hoặc trống (ký hiệu .), hoặc chứa một người mẫu loại +, x hay loại siêu thời thượng o. Mỗi + hoặc x cho 1 điểm phong cách, mỗi o cho 2 điểm, ô trống không cho điểm.
Để đạt hiệu quả nghệ thuật tối đa, cách đặt phải tuân theo:
+.x.Một cách chính xác, hai ô \((i_0,j_0)\) và \((i_1,j_1)\) cùng hàng khi \(i_0=i_1\), cùng cột khi \(j_0=j_1\), và cùng đường chéo khi \(i_0+j_0=i_1+j_1\) hoặc \(i_0-j_0=i_1-j_1\).
Ví dụ, lưới sau không hợp lệ:
...
x+o
.+.
Ở hàng giữa, cặp x và o không có ai là +. Trên đường chéo từ + ở hàng cuối tới o ở hàng giữa cũng có hai người mà không ai là x.
Ngược lại, lưới sau hợp lệ vì không hàng, cột hay đường chéo nào vi phạm:
+.x
+x+
o..
Cố vấn đã đặt trước \(M\) người mẫu theo đúng quy tắc. Bạn có thể thêm tùy ý (kể cả không thêm) bất kỳ loại nào. Không được bỏ người mẫu có sẵn, nhưng có thể nâng cấp bao nhiêu + hoặc x thành o tùy ý, miễn vẫn hợp lệ. Hãy tìm một cách đặt/thay thế hợp lệ có tổng điểm phong cách lớn nhất.
Dòng đầu chứa số test \(T\). Mỗi test bắt đầu bằng \(N,M\), sau đó là \(M\) dòng; dòng thứ \(i\) chứa loại +, x hoặc o và hai số \(R_i,C_i\). Hàng được đánh số từ 1 đến \(N\) từ trên xuống, cột từ 1 đến \(N\) từ trái sang phải.
Với mỗi test, trước tiên in Case #x: y z, trong đó x là số thứ tự test bắt đầu từ 1, y là tổng điểm của cách bố trí và z là tổng số người mẫu đã thêm hoặc thay thế. Sau đó in đúng \(z\) dòng theo định dạng input, ghi loại cuối cùng và vị trí của từng người mẫu được thêm/thay; các dòng có thể theo thứ tự bất kỳ.
Nếu có nhiều đáp án hợp lệ, có thể in bất kỳ đáp án nào.
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 | 10/35 | 28,57% |
| Test Set 2 | 25/35 | 71,43% |
Ví dụ 1
3
2 0
1 1
o 1 1
3 4
+ 2 3
+ 2 1
x 3 1
+ 2 2
Case #1: 4 3
o 2 2
+ 2 1
x 1 1
Case #2: 2 0
Case #3: 6 2
o 2 3
x 1 2
Output mẫu chỉ là một tập đáp án; có thể có các đáp án khác. Test cuối sẽ không xuất hiện trong Test Set 1.
Test 1 là lưới \(2\times2\) ban đầu trống; output tương ứng với:
x.
+o
Trong test 2, ô duy nhất đã chứa o; không thể thêm người mới hay thay o.
Trước khi đặt thêm, test 3 là:
...
+++
x..
Output tương ứng với:
.x.
++o
x..
Google Code Jam 2017, Vòng loại, bài Fashion Show.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Năm ngoái, Infinite House of Pancakes giới thiệu một loại bánh mới: một mặt có khuôn mặt vui bằng hạt sô-cô-la (“mặt vui”), mặt kia không có gì (“mặt trắng”).
Bạn là bếp trưởng trực ca. Bánh được nướng thành một hàng trên bề mặt nóng. Để tiếp tục nâng cao hiệu suất, nhà hàng cấp cho bạn một xẻng lật quá khổ, mỗi lần lật đúng \(K\) chiếc bánh liên tiếp. Trong đoạn ấy, mọi bánh đang ngửa mặt vui sẽ thành mặt trắng và ngược lại; thứ tự trái sang phải của bánh không đổi.
Bạn không thể dùng xẻng để lật ít hơn \(K\) chiếc, kể cả ở hai đầu hàng vì bề mặt nướng có gờ cao hai bên. Chẳng hạn, có thể lật \(K\) chiếc đầu tiên nhưng không thể lật chỉ \(K-1\) chiếc đầu.
Người học việc vừa dùng xẻng loại cũ để lật riêng một số bánh rồi mang xẻng ấy vào nhà vệ sinh, ngay trước lúc khách tham quan bếp. Bạn chỉ còn xẻng quá khổ và cần nhanh chóng làm mọi chiếc bánh ngửa mặt vui để khách ra về vui vẻ.
Biết trạng thái hiện tại, hãy tính số lần dùng xẻng ít nhất để tất cả bánh ngửa mặt vui, hoặc cho biết điều đó là không thể.
Dòng đầu chứa số test \(T\). Mỗi test gồm một dòng chứa chuỗi \(S\) và số nguyên \(K\). Chuỗi \(S\) biểu diễn hàng bánh: + là bánh ban đầu ngửa mặt vui, - là bánh ban đầu ngửa mặt trắng.
Với mỗi test, in Case #x: y, trong đó x là số thứ tự test bắt đầu từ 1; y là IMPOSSIBLE nếu không thể làm mọi bánh ngửa mặt vui, hoặc là số lần dùng xẻng ít nhất.
+ hoặ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 | 5/15 | 33,33% |
| Test Set 2 | 10/15 | 66,67% |
Ví dụ 1
3
---+-++- 3
+++++ 4
-+-+- 4
Case #1: 3
Case #2: 0
Case #3: IMPOSSIBLE
Trong test 1, lật ba bánh ngoài cùng bên trái để được ++++-++-, rồi lật ba bánh ngoài cùng bên phải để được ++++---+, cuối cùng lật ba bánh còn ngửa mặt trắng. Có những cách dùng từ 3 lần trở lên, nhưng không có cách nào dùng ít hơn 3 lần.
Trong test 2, mọi bánh đã ngửa mặt vui nên không cần lật.
Trong test 3, không thể làm bánh thứ hai và thứ ba từ trái sang cùng ngửa một mặt, vì mọi phép lật hợp lệ đều lật cả hai. Do đó không thể làm tất cả bánh ngửa mặt vui.
Google Code Jam 2017, Vòng loại, bài Oversized Pancake Flipper.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Tatiana thích giữ mọi thứ thật ngăn nắp. Đồ chơi của cô được xếp từ nhỏ đến lớn, bút chì từ ngắn đến dài, còn máy tính từ cũ đến mới. Một ngày nọ, khi luyện đếm, cô nhận thấy một số số nguyên khi được viết ở hệ cơ số 10 và không có chữ số 0 ở đầu thì các chữ số của chúng được sắp theo thứ tự không giảm. Chẳng hạn, 8, 123, 555 và 224488 đều có tính chất này. Cô gọi những số như vậy là số gọn gàng (tidy number). Những số không có tính chất ấy, như 20, 321, 495 và 999990, không phải số gọn gàng.
Cô vừa đếm xong tất cả các số nguyên dương theo thứ tự tăng dần từ 1 đến \(N\). Số gọn gàng cuối cùng mà cô đã đếm là số nào?
Dòng đầu tiên chứa số lượng bộ test \(T\). Tiếp theo là \(T\) dòng; mỗi dòng mô tả một bộ test bằng một số nguyên \(N\), số cuối cùng Tatiana đã đếm.
Với mỗi bộ test, in một dòng có dạng Case #x: y, trong đó x là số thứ tự bộ test (bắt đầu từ 1) và y là số gọn gàng cuối cùng Tatiana đã đếm.
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 | 5/20 | 25% |
| Test Set 2 | 15/20 | 75% |
Ví dụ 1
4
132
1000
7
111111111111111110
Case #1: 129
Case #2: 999
Case #3: 7
Case #4: 99999999999999999
Lưu ý rằng bộ test mẫu cuối cùng không thể xuất hiện trong Test Set 1.
Google Code Jam 2017, Vòng loại, bài Tidy Numbers.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.