| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | Google Code Jam 2012 - Equal Sums | 43 | 17.0s | 1G |
| 2 | Google Code Jam 2012 - Safety in Numbers | 21 | 1.0s | 1G |
| 3 | Google Code Jam 2012 - Tide Goes In, Tide Goes Out | 36 | 11.0s | 1G |
Tôi có một tập hợp các số nguyên dương \(S\). Bạn có thể tìm thấy hai tập hợp con khác nhau, không rỗng, có cùng tổng hay không?
Lưu ý: Một tập hợp con là một tập hợp chỉ chứa các phần tử từ \(S\), và hai tập hợp con là khác nhau nếu chúng không có chính xác các phần tử giống nhau.
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ộ trên một dòng. Mỗi bộ test bắt đầu bằng \(N\), số lượng số nguyên dương trong \(S\). Tiếp theo là \(N\) số nguyên dương phân biệt, tất cả nằm trên cùng một dòng.
Đối với mỗi bộ test, trước tiên hãy in ra một dòng chứa "Case #x:", trong đó x là số thứ tự bộ test (bắt đầu từ 1).
Nếu có nhiều cách chọn hai tập hợp con có cùng tổng, bất kỳ lựa chọn nào cũng được chấp nhận.
Test set 1 (Visible Verdict)
Test set 2 (Hidden Verdict)
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 | 6/43 | 13,95% |
| Test Set 2 | 37/43 | 86,05% |
Ví dụ 1
2
20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
20 120 266 858 1243 1657 1771 2328 2490 2665 2894 3117 4210 4454 4943 5690 6170 7048 7125 9512 9600
Case #1: Possible
Case #2: Possible
Google Code Jam 2012, Vòng 1B, bài Equal Sums.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Có \(N\) thí sinh trong một chương trình truyền hình thực tế. Mỗi thí sinh được ban giám khảo cho một số điểm và nhận được bình chọn từ khán giả. Điểm số từ ban giám khảo và bình chọn từ khán giả được kết hợp để tạo thành điểm số cuối cùng cho thí sinh theo cách sau:
Gọi \(X\) là tổng điểm số mà ban giám khảo đã cho tất cả các thí sinh. Giả sử một thí sinh nhận được \(J\) điểm từ ban giám khảo và nhận được một tỉ lệ \(Y\) (từ 0 đến 1, bao gồm cả hai đầu) trong tổng số phiếu bầu của khán giả (\(Y\) có thể ví dụ là 0.3). Khi đó điểm số cuối cùng của thí sinh đó là \(J + X \times Y\). Lưu ý rằng tổng tỉ lệ bình chọn của khán giả cho tất cả các thí sinh phải bằng 1.
Thí sinh có điểm số thấp nhất sẽ bị loại.
Cho biết số điểm mà các thí sinh nhận được từ ban giám khảo, nhiệm vụ của bạn là tìm ra, đối với mỗi thí sinh, phần trăm bình chọn tối thiểu từ khán giả mà họ phải nhận được để đảm bảo không bị loại, bất kể số phiếu bầu còn lại của khán giả được phân phối như thế nào.
Nếu có nhiều thí sinh cùng có điểm số thấp nhất, sẽ không có thí sinh nào bị loại.
Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(T\). \(T\) bộ test tiếp theo, mỗi bộ trên một dòng. Mỗi dòng bắt đầu bằng một số nguyên \(N\), số lượng thí sinh, theo sau là một khoảng trắng, rồi đến \(N\) số nguyên \(s_0, s_1, \dots, s_{N-1}\), ngăn cách bởi các khoảng trắng đơn. Số nguyên \(s_i\) là điểm số được ban giám khảo chấm cho thí sinh \(i\).
Với mỗi bộ test, xuất ra một dòng chứa "Case #x: " theo sau là \(N\) số thực: \(m_i\). Giá trị x là số thứ tự bộ test (bắt đầu từ 1). Giá trị \(m_i\) là phần trăm bình chọn tối thiểu của khán giả cần thiết để thí sinh \(i\) chắc chắn tránh bị loại.
Các câu trả lời trong phạm vi sai số tuyệt đối hoặc tương đối \(10^{-5}\) so với đáp án đúng sẽ được chấp nhậ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 | 10/21 | 47,62% |
| Test Set 2 | 11/21 | 52,38% |
Ví dụ 1
4
2 20 10
2 10 0
4 25 25 25 25
3 24 30 21
Case #1: 33.333333 66.666667
Case #2: 0.000000 100.000000
Case #3: 25.0 25.0 25.0 25.0
Case #4: 34.666667 26.666667 38.666667
Google Code Jam 2012, Vòng 1B, bài Safety in 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.
Bạn đang chèo thuyền kayak qua một hệ thống hang động ngầm và đột nhiên nhận ra thủy triều đang lên và bạn bị mắc kẹt! May mắn thay, bạn có bản đồ của hệ thống hang động. Bạn bị kẹt cho đến khi thủy triều bắt đầu rút, vì vậy bạn sẽ ở đây một lúc. Trong thời gian chờ đợi, bạn muốn xác định con đường nhanh nhất để đến lối thoát ngay khi thủy triều bắt đầu rút.
Hệ thống hang động là một lưới kích thước \(N \times M\). Bản đồ của bạn gồm hai lưới số \(N \times M\): một lưới xác định chiều cao của trần hang ở mỗi ô, và một lưới xác định chiều cao của sàn hang ở mỗi ô. Sàn của hệ thống hang động có tính thẩm thấu, nghĩa là khi mực nước giảm xuống, sẽ không có nước đọng lại phía trên mực nước.
Bạn đang bị kẹt ở góc tây bắc của bản đồ. Mực nước hiện tại là \(H\) cm, và một khi nó bắt đầu giảm, nó sẽ giảm với tốc độ không đổi là 10 cm mỗi giây, xuống đến mức 0. Lối thoát nằm ở góc đông nam của bản đồ. Hiện tại nó đang bị ngập nước, nhưng nó sẽ trở nên khả dụng ngay khi thủy triều bắt đầu rút.
Tại bất kỳ thời điểm nào, bạn có thể di chuyển theo hướng bắc, nam, đông hoặc tây sang một ô liền kề với các ràng buộc sau:
Lưu ý rằng bạn có thể lên hoặc xuống bao nhiêu tùy thích với chiếc thuyền kayak của mình. (Bạn rất khỏe mạnh nhờ việc chèo thuyền này!) Ví dụ, bạn có thể đi từ một ô có sàn ở độ cao 10 cm sang một ô liền kề có sàn ở độ cao 9000 cm (giả sử các ràng buộc nêu trên được đáp ứng).
Các ràng buộc này được minh họa dưới đây:
Khi di chuyển từ ô này sang ô khác, nếu có ít nhất 20 cm nước còn lại trên ô hiện tại khi bạn bắt đầu di chuyển, bạn mất 1 giây để hoàn thành việc di chuyển (bạn có thể dùng thuyền kayak). Ngược lại, bạn mất 10 giây (bạn phải kéo thuyền). Lưu ý rằng thời gian chỉ phụ thuộc vào mực nước ở ô bạn rời đi, không phải ở ô bạn đi vào.
Sẽ mất một thời gian trước khi thủy triều bắt đầu rút, và vì vậy bạn có thể dành bao nhiêu thời gian tùy thích để di chuyển trước khi nước bắt đầu hạ xuống. Điều quan trọng là bạn cần bao nhiêu thời gian kể từ thời điểm nước bắt đầu hạ cho đến khi bạn đến được lối thoát. Bạn có thể tính toán thời gian này không?
Đối với mỗi bộ thử nghiệm, hãy xuất một dòng chứa "Case #x: t", trong đó x là số thứ tự bộ thử nghiệm (bắt đầu từ 1) và t là thời gian, tính bằng giây, bắt đầu từ khi thủy triều bắt đầu rút, để bạn thoát ra khỏi hệ thống hang động. Các câu trả lời trong phạm vi sai số tuyệt đối hoặc tương đối \(10^{-6}\) so với câu trả lời đúng sẽ được chấp nhận.
Có thể bạn có thể đi qua toàn bộ hệ thống hang động trước khi thủy triều bắt đầu rút. Trong trường hợp này, bạn có thể đợi ở lối thoát cho đến khi thủy triều bắt đầu rút, vì vậy câu trả lời trong trường hợp này phải là 0 (đây là trường hợp trong ví dụ thứ tư).
Test set 1 (Visible Verdict):
\(1 \le T \le 50\).
\(1 \le N, M \le 10\).
\(1 \le H \le 1000\).
\(1 \le F_{xy} \le C_{xy} \le 1000\).
Test set 2 (Hidden Verdict):
\(1 \le T \le 50\).
\(1 \le N, M \le 100\).
\(1 \le H \le 10000\).
\(1 \le F_{xy} \le C_{xy} \le 10000\).
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 | 18/36 | 50% |
| Test Set 2 | 18/36 | 50% |
Ví dụ 1
4
200 1 2
250 233
180 100
100 3 3
500 500 500
500 500 600
500 140 1000
10 10 10
10 10 490
10 10 10
100 3 3
500 100 500
100 100 500
500 500 500
10 10 10
10 10 10
10 10 10
100 2 2
1000 1000
1000 1000
100 900
900 100
Case #1: 11.7
Case #2: 3.0
Case #3: 18.0
Case #4: 0.0
Google Code Jam 2012, Vòng 1B, bài Tide Goes In, Tide Goes Out.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.