Google Code Jam 2009 - Round 1A

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 Google Code Jam 2009 - Collecting Cards 40 1.0s 1G
2 Google Code Jam 2009 - Crossing the Road 33 1.0s 1G
3 Google Code Jam 2009 - Multi-base happiness 27 16.5s 1G

1. Google Code Jam 2009 - Collecting Cards

Điểm: 40 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Bạn đã trở nên nghiện trò chơi thẻ bài mới nhất mang tên PokeCraft: The Gathering. Bạn đã nắm vững luật chơi! Bạn đã xây dựng được các bộ bài cân bằng, tấn công và phòng thủ! Bạn tranh luận về giá trị của các lá bài khác nhau trên các diễn đàn Internet! Bạn thi đấu trong các giải đấu! Và bây giờ, khi họ vừa công bố bộ thẻ bài mới khổng lồ sắp ra mắt vào năm 2010, bạn đã quyết định rằng mình muốn thu thập mọi lá bài cuối cùng trong số đó! May mắn thay, phần lý trí còn sót lại trong não bạn đang tự hỏi: việc này sẽ tốn bao nhiêu chi phí?

\(C\) loại thẻ bài trong bộ sắp tới. Các thẻ bài sẽ được bán trong các "gói bổ trợ" (booster packs), mỗi gói chứa \(N\) thẻ bài thuộc các loại khác nhau. Có nhiều tổ hợp có thể có cho một gói bổ trợ mà không có thẻ bài nào bị lặp lại trong cùng một gói. Khi bạn trả tiền cho một gói, bạn sẽ nhận được bất kỳ tổ hợp nào có thể với xác suất như nhau. Bạn mua từng gói một, cho đến khi bạn sở hữu tất cả \(C\) loại thẻ. Số lượng gói bổ trợ dự kiến (trung bình) bạn cần mua là bao nhiêu?

Dữ liệu vào

Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ thử nghiệm, \(T\). \(T\) bộ thử nghiệm tiếp theo, mỗi bộ gồm một dòng chứa \(C\)\(N\).

Dữ liệu ra

Đối với mỗi bộ thử nghiệm, hãy xuất một dòng theo định dạng:

Case #x: E

trong đó \(x\) là số thứ tự bộ thử nghiệm, bắt đầu từ 1, và \(E\) là số lượng gói bổ trợ dự kiến bạn cần mua. Bất kỳ câu trả lời nào có sai số tương đối hoặc tuyệt đối không quá \(10^{-5}\) đều sẽ được chấp nhận.

Ràng buộc

  • \(1 \le T \le 100\)

Phân nhóm

  • Small dataset: \(1 \le N \le C \le 10\)
  • Large dataset: \(1 \le N \le C \le 40\)

Điểm các phân nhó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 10/40 25%
Test Set 2 30/40 75%

Ví dụ

Ví dụ 1

Input
2
2 1
3 2
Output
Case #1: 3.0000000
Case #2: 2.5000000

Nguồn

Google Code Jam 2009, Vòng 1A, bài Collecting Cards.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.

2. Google Code Jam 2009 - Crossing the Road

Điểm: 33 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Tại các giao lộ, thường có đèn giao thông báo cho người đi bộ biết khi nào họ nên băng qua đường. Một người đi bộ thông minh có thể cố gắng tối ưu hóa lộ trình của mình qua thành phố dựa trên thời điểm các đèn giao thông chuyển sang màu xanh.

Thành phố trong bài toán này là một lưới gồm \(N\) hàng và \(M\) cột các khối nhà. Người đi bộ của chúng ta muốn đi từ góc đông bắc của khối nhà phía tây nam đến góc tây nam của khối nhà phía đông bắc. Mục tiêu của bạn là giúp cô ấy tìm đường từ góc này sang góc kia trong thời gian nhanh nhất có thể.

Người đi bộ có thể băng qua đường trong 1 phút, nhưng chỉ khi đèn giao thông có màu xanh trong suốt toàn bộ quá trình băng qua. Người đi bộ có thể di chuyển giữa hai con đường, dọc theo một cạnh của khối nhà, trong 2 phút. Người đi bộ chỉ có thể di chuyển dọc theo các cạnh của khối nhà; cô ấy không thể di chuyển theo đường chéo từ góc này sang góc đối diện của một khối nhà.

Đèn giao thông tuân theo quy luật sau: tại giao lộ \(i\), đèn hướng bắc-nam giữ màu xanh trong \(S_i\) phút, trong khi đèn hướng đông-tây giữ màu đỏ. Sau đó, đèn bắc-nam chuyển sang màu đỏ, đèn đông-tây chuyển sang màu xanh và giữ như vậy trong \(W_i\) phút. Sau đó, chúng bắt đầu lại chu kỳ tương tự. Người đi bộ bắt đầu di chuyển tại thời điểm \(t=0\) phút; đèn giao thông \(i\) bắt đầu một chu kỳ bằng cách chuyển sang màu xanh theo hướng bắc-nam tại thời điểm \(t=T_i\) phút. Cũng có các chu kỳ trước thời điểm \(t=T_i\).

Ví dụ, giao lộ 0 có thể có các giá trị sau:
S_0 = 3, W_0 = 2, T_0 = 0

Hướng bắc-nam chuyển sang màu xanh sau 0 phút. Trạng thái đó kéo dài 3 phút, trong thời gian đó người đi bộ có thể băng qua theo hướng bắc-nam chứ không phải hướng đông-tây. Sau đó đèn chuyển đổi, và trong 2 phút tiếp theo, người đi bộ có thể băng qua theo hướng đông-tây chứ không phải hướng bắc-nam. Sau đó, 5 phút kể từ khi bắt đầu, chu kỳ lại bắt đầu. Điều này hoàn toàn giống với cấu hình sau:
S_0 = 3, W_0 = 2, T_0 = 10

Dữ liệu vào

Dòng đầu tiên của dữ liệu vào chứa số lượng bộ thử nghiệm, \(C\). Tiếp theo là \(C\) bộ thử nghiệm theo định dạng sau:

Một dòng duy nhất chứa "\(N\) \(M\)", trong đó \(N\)\(M\) lần lượt là số lượng đường ngang (hàng) và đường dọc (cột), như đã mô tả ở trên. Tiếp theo là \(N\) dòng. Dòng thứ \(i\) chứa thông tin về các giao lộ trên hàng thứ \(i\), với hàng thứ 0 là hàng ở cực bắc. Mỗi dòng đó sẽ chứa \(3M\) số nguyên, cách nhau bởi dấu cách, dưới dạng:

S_{i,0} W_{i,0} T_{i,0} S_{i,1} W_{i,1} T_{i,1}... S_{i,M-1} W_{i,M-1} T_{i,M-1}

\(S_{i,j}\), \(W_{i,j}\)\(T_{i,j}\) đều đề cập đến giao lộ ở hàng thứ \(i\) tính từ phía bắc và cột thứ \(j\) tính từ phía tây.

Dữ liệu ra

Với mỗi bộ thử nghiệm, hãy xuất một dòng duy nhất chứa văn bản "Case #x: t", trong đó x là số thứ tự của bộ thử nghiệm và t là số phút tối thiểu để người đi bộ đi từ góc tây nam đến góc đông bắc.

Ràng buộc

  • \(C, N, M, S_{i,j}, W_{i,j}, T_{i,j}\) đều là các số nguyên không âm.
  • \(C \le 100\)

Phân nhóm

  • Small Input: \(1 \le N, M \le 3\); \(0 < S_{i,j}, W_{i,j} \le 10\); \(0 \le T_{i,j} \le 20\).
  • Large Input: \(1 \le N, M \le 20\); \(0 < S_{i,j}, W_{i,j} \le 10^7\); \(0 \le T_{i,j} \le 10^8\).

Điểm các phân nhó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 13/33 39,39%
Test Set 2 20/33 60,61%

Ví dụ

Ví dụ 1

Input
2
1 1
3 2 10
1 2
1 5 3 1 5 2
Output
Case #1: 4
Case #2: 7
Note

Giải thích

Trường hợp đầu tiên được mô tả ở trên. Người đi bộ băng qua phía Bắc (1 phút), đợi 2 phút và sau đó băng qua phía Đông (1 phút), tổng cộng là 4 phút.

Trường hợp thứ hai được mô tả trong sơ đồ bên dưới. Người đi bộ băng qua phía Đông (1 phút), đợi 2 phút và băng qua phía Bắc (1 phút). Sau đó cô ấy đi bộ về phía đông một khối nhà (2 phút) và băng qua phía Đông (1 phút) với tổng cộng 7 phút.

Nguồn

Google Code Jam 2009, Vòng 1A, bài Crossing the Road.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.

3. Google Code Jam 2009 - Multi-base happiness

Điểm: 27 Thời gian: 16.5s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Cho một số nguyên \(N\), thay thế nó bằng tổng bình phương các chữ số của nó. Một số hạnh phúc (happy number) là một số mà nếu bạn áp dụng quy trình này lặp đi lặp lại, cuối cùng nó sẽ dẫn đến kết quả là 1. Ví dụ, nếu bạn bắt đầu với 82:

8*8 + 2*2       = 64 + 4    = 68,  repeat:
6*6 + 8*8       = 36 + 64   = 100, repeat:
1*1 + 0*0 + 0*0 = 1 + 0 + 0 = 1 (happy! :)

Vì quy trình này dẫn đến 1, nên 82 là một số hạnh phúc.

Lưu ý rằng một số có thể là số hạnh phúc trong một số hệ cơ số này, nhưng không hạnh phúc trong các hệ cơ số khác. Ví dụ, số 82 ở hệ cơ số 10 không phải là số hạnh phúc khi viết ở hệ cơ số 3 (dưới dạng 10001).

Bạn là một trong những thám tử số học hàng đầu thế giới. Một số hệ cơ số đã tập hợp lại và thuê bạn cho một nhiệm vụ quan trọng: tìm số nguyên nhỏ nhất lớn hơn 1 mà là số hạnh phúc trong tất cả các hệ cơ số đã cho.

Dữ liệu vào

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ộ test bao gồm một dòng duy nhất. Mỗi dòng chứa một danh sách các số nguyên phân biệt cách nhau bởi dấu cách, đại diện cho các hệ cơ số. Danh sách các hệ cơ số luôn được sắp xếp theo thứ tự tăng dần.

Dữ liệu ra

Đối với mỗi bộ test, hãy xuất:

Case #X: K

trong đó X là số thứ tự bộ test, bắt đầu từ 1, và K là biểu diễn thập phân của số nguyên nhỏ nhất (lớn hơn 1) là số hạnh phúc trong tất cả các hệ cơ số đã cho.

Ràng buộc

  • \(2 \le\) tất cả các hệ cơ số đầu vào có thể có \(\le 10\).

Phân nhóm

  • Small dataset: \(1 \le \mathbf{T} \le 42\); \(2 \le\) số lượng hệ cơ số trong mỗi bộ test \(\le 3\).
  • Large dataset: \(1 \le \mathbf{T} \le 500\); \(2 \le\) số lượng hệ cơ số trong mỗi bộ test \(\le 9\).

Điểm các phân nhó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 9/27 33,33%
Test Set 2 18/27 66,67%

Ví dụ

Ví dụ 1

Input
3
2 3
2 3 7
9 10
Output
Case #1: 3
Case #2: 143
Case #3: 91

Ghi chú quan trọng

Vui lòng nhớ rằng bạn phải nộp tất cả mã nguồn được sử dụng để giải bài toán này.

Nguồn

Google Code Jam 2009, Vòng 1A, bài Multi-base happiness.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.