Google Code Jam 2016 - Technobabble

Xem PDF




Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2000 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Mỗi năm, giáo sư của bạn dán một tờ đăng ký trống lên cửa phòng để sinh viên đăng ký tham dự một hội nghị nghiên cứu khoa học danh giá. Nếu muốn thuyết trình tại hội nghị, sinh viên chọn một chủ đề gồm hai từ chưa có trên tờ giấy rồi viết chủ đề đó vào. Khi hết hạn đăng ký, giáo sư nhờ một nghiên cứu sinh sắp xếp ngẫu nhiên các chủ đề để không thiên vị người đăng ký sớm hay muộn, rồi đưa danh sách cho bạn xem xét.

Đồ ăn nhẹ ở hội nghị rất ngon, nên một số sinh viên tìm cách giả mạo để được tham dự. Họ lấy từ thứ nhất của một chủ đề đã có trên tờ giấy và từ thứ hai của một chủ đề đã có trên tờ giấy, rồi ghép chúng theo đúng thứ tự đó thành một “chủ đề” mới, miễn là chủ đề mới chưa có trên tờ giấy. Vì giáo sư của bạn rất cởi mở, đôi khi mánh này thật sự thành công!

Những người giả mạo hoàn toàn thiếu sáng tạo và không thể tự nghĩ ra từ thứ nhất hay từ thứ hai mới; họ buộc phải dùng những từ đã có trên tờ giấy. Hơn nữa, họ không dùng một từ vốn xuất hiện ở vị trí thứ nhất làm từ thứ hai của mình, trừ khi từ đó cũng đã xuất hiện ở vị trí thứ hai trên tờ giấy; chiều ngược lại cũng tương tự.

Bạn có danh sách gồm toàn bộ \(N\) chủ đề đã nộp theo một thứ tự tùy ý, nhưng không biết thứ tự thực tế chúng được ghi lên tờ giấy. Số chủ đề lớn nhất có thể đã bị giả mạo là bao nhiêu?

Dữ liệu vào

Dòng đầu tiên chứa số bộ test \(T\). Mỗi bộ test bắt đầu bằng một dòng chứa số nguyên \(N\), sau đó là \(N\) dòng. Mỗi dòng biểu diễn một chủ đề khác nhau và chứa hai chuỗi chữ cái tiếng Anh viết hoa: hai từ của chủ đề, theo đúng thứ tự.

Dữ liệu ra

Với mỗi bộ test, in một dòng Case #x: y, trong đó x là số thứ tự bộ test (bắt đầu từ 1), còn y là số nguyên lớn nhất các chủ đề có thể đã bị giả mạo.

Ràng buộc

  • \(1 \le T \le 100\).
  • Độ dài mỗi từ nằm trong đoạn từ 1 đến 20.
  • Không có chủ đề nào lặp lại trong cùng một bộ test.

Phân nhóm

  • Test Set 1 (Hiển thị): \(1 \le N \le 16\).
  • Test Set 2 (Ẩn): \(1 \le N \le 1000\).

Đ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 14/44 31,82%
Test Set 2 30/44 68,18%

Ví dụ

Ví dụ 1

Input
3
3
HYDROCARBON COMBUSTION
QUAIL BEHAVIOR
QUAIL COMBUSTION
3
CODE JAM
SPACE JAM
PEARL JAM
2
INTERGALACTIC PLANETARY
PLANETARY INTERGALACTIC
Output
Case #1: 1
Case #2: 0
Case #3: 0
Giải thích

Trong bộ test mẫu số 1, một khả năng là các chủ đề được thêm vào tờ giấy theo thứ tự sau:

QUAIL BEHAVIOR (thật)
HYDROCARBON COMBUSTION (thật)
QUAIL COMBUSTION (giả)

Không có kịch bản nào cho phép nhiều hơn một chủ đề là giả.

Trong bộ test mẫu số 2, mọi chủ đề đều phải là thật. Dù chúng được ghi theo thứ tự nào, không thời điểm nào ta có thể dùng các từ đã có để tạo ra một chủ đề mới chưa nằm trong danh sách.

Trong bộ test mẫu số 3, cả hai chủ đề đều không thể là giả. Chẳng hạn, nếu INTERGALACTIC PLANETARY là chủ đề đầu tiên và duy nhất đã được ghi, người giả mạo chỉ có thể dùng INTERGALACTIC làm từ thứ nhất và PLANETARY làm từ thứ hai. Chủ đề duy nhất họ tạo được là chính INTERGALACTIC PLANETARY, nhưng chủ đề đó bị cấm vì đã có trên tờ giấy. Do đó PLANETARY INTERGALACTIC cũng phải là chủ đề thật.

Nguồn

Google Code Jam 2016, Vòng 1B, bài Technobabble.

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ình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: