Google Code Jam 2014 - Magic Trick
Xem PDFLưu ý: Để tiến vào các vòng tiếp theo, bạn cần đạt được 25 điểm. Chỉ giải quyết bài toán này sẽ không cung cấp cho bạn đủ điểm.
Bài toán
Gần đây bạn đã đi xem một buổi biểu diễn ảo thuật. Bạn rất ấn tượng bởi một trong những trò ảo thuật, vì vậy bạn quyết định cố gắng tìm ra bí mật đằng sau nó!
Đầu tiên, nhà ảo thuật sắp xếp 16 lá bài thành một lưới vuông: 4 hàng bài, mỗi hàng có 4 lá. Mỗi lá bài có một số khác nhau từ 1 đến 16 được viết trên mặt đang hiển thị. Tiếp theo, nhà ảo thuật yêu cầu một người tình nguyện chọn một lá bài và cho ông ta biết lá bài đó nằm ở hàng nào.
Cuối cùng, nhà ảo thuật sắp xếp lại 16 lá bài vào một lưới vuông một lần nữa, có thể theo một thứ tự khác. Một lần nữa, ông ta hỏi người tình nguyện lá bài của cô ấy nằm ở hàng nào. Chỉ với câu trả lời cho hai câu hỏi này, nhà ảo thuật sau đó xác định chính xác lá bài mà người tình nguyện đã chọn. Thật kinh ngạc, phải không?
Bạn quyết định viết một chương trình để giúp bạn hiểu kỹ thuật của nhà ảo thuật. Chương trình sẽ được cung cấp hai cách sắp xếp các lá bài và câu trả lời của người tình nguyện cho hai câu hỏi: số hàng của lá bài được chọn trong cách sắp xếp thứ nhất và số hàng của lá bài được chọn trong cách sắp xếp thứ hai. Các hàng được đánh số từ 1 đến 4 từ trên xuống dưới.
Chương trình của bạn nên xác định lá bài nào người tình nguyện đã chọn; hoặc nếu có nhiều hơn một lá bài mà người tình nguyện có thể đã chọn (nhà ảo thuật đã làm không tốt); hoặc nếu không có lá bài nào phù hợp với câu trả lời của người tình nguyện (người tình nguyện đã gian lận).
Giải quyết bài toán này
Thông thường, các bài toán Google Code Jam có 1 Small input và 1 Large input. Bài toán này chỉ có 1 Small input. Khi bạn đã giải xong Small input, bạn đã hoàn thành việc giải bài toán này.
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 nối tiếp sau đó. Mỗi bộ test bắt đầu bằng một dòng chứa một số nguyên: câu trả lời cho câu hỏi thứ nhất. 4 dòng tiếp theo đại diện cho cách sắp xếp lá bài thứ nhất: mỗi dòng chứa 4 số nguyên, cách nhau bởi một khoảng trắng duy nhất. Dòng tiếp theo chứa câu trả lời cho câu hỏi thứ hai, và bốn dòng tiếp theo chứa cách sắp xếp thứ hai với cùng định dạng.
Dữ liệu ra
Với mỗi bộ test, hãy xuất một dòng chứa "Case #x: y", trong đó x là số thứ tự bộ test (bắt đầu từ 1).
Nếu có một lá bài duy nhất mà người tình nguyện có thể đã chọn, y nên là số trên lá bài đó. Nếu có nhiều lá bài mà người tình nguyện có thể đã chọn, y nên là "Bad magician!", không có dấu ngoặc kép. Nếu không có lá bài nào phù hợp với câu trả lời của người tình nguyện, y nên là "Volunteer cheated!", không có dấu ngoặc kép. Văn bản cần phải chính xác tuyệt đối, vì vậy hãy cân nhắc việc sao chép/dán nó từ đây.
Ràng buộc
1 ≤ T ≤ 100.
1 ≤ cả hai câu trả lời ≤ 4.
Mỗi số từ 1 đến 16 sẽ xuất hiện đúng một lần trong mỗi cách sắp xếp.
Phân nhóm
Các giới hạn của từng tập dữ liệu được nêu trong mục Ràng buộc.
Đ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 | 6/6 | 100% |
Ví dụ
Ví dụ 1
Input
3
2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
3
1 2 5 4
3 11 6 15
9 10 7 12
13 14 8 16
2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
3
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Output
Case #1: 7
Case #2: Bad magician!
Case #3: Volunteer cheated!
Nguồn
Google Code Jam 2014, Vòng loại, bài Magic Trick.
Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.
Kỳ thi:
- Google Code Jam 2014 - Qualification Round (12 Tháng tư, 2014)
Bình luận