Google Code Jam 2019 - Alien Rhyme

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: 1800 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Đề bài

Trong một chuyến thám hiểm ngoài Trái Đất, bạn đã tìm thấy bằng chứng về thơ ca của người ngoài hành tinh! Nhóm ngôn ngữ học của bạn xác định rằng mỗi từ trong ngôn ngữ ngoài hành tinh có trọng âm ở đúng một vị trí (một chữ cái) trong từ; phần của từ bắt đầu từ chữ cái mang trọng âm được gọi là hậu tố trọng âm. Hai từ được coi là gieo vần nếu hậu tố trọng âm của chúng giống nhau. Chẳng hạn, hai từ PROLTARPOL gieo vần nếu chữ cái mang trọng âm trong cả hai từ là O hoặc L, nhưng chúng không gieo vần nếu các chữ cái mang trọng âm là hai chữ R, hoặc là R trong PROLP trong TARPOL, hoặc là O trong PROLL trong TARPOL.

Bạn đã khôi phục được danh sách \(N\) từ có thể thuộc một bài thơ ngoài hành tinh. Đáng tiếc là bạn không biết chữ cái nào mang trọng âm trong mỗi từ. Bạn tin rằng mình có thể loại bỏ không hoặc nhiều từ trong số này, gán chữ cái mang trọng âm cho các từ còn lại, rồi sắp xếp các từ đó thành từng cặp sao cho mỗi từ chỉ gieo vần với từ còn lại trong cặp của nó và không gieo vần với bất kỳ từ nào thuộc các cặp khác.

Hãy tìm số lượng từ lớn nhất có thể được sắp xếp thành các cặp theo cách này.

Dữ liệu vào

Dòng đầu tiên chứa số lượng bộ test \(T\). Tiếp theo là \(T\) bộ test. Mỗi bộ test bắt đầu bằng một dòng chứa số nguyên duy nhất \(N\). Sau đó là \(N\) dòng, mỗi dòng chứa một chuỗi \(W_i\) gồm các chữ cái tiếng Anh in hoa, biểu diễn một từ riêng biệt. Lưu ý rằng cùng một từ có thể được gán trọng âm khác nhau trong các bộ test khác nhau.

Dữ liệu ra

Với mỗi bộ test, in ra một dòng theo định dạng Case #x: y, trong đó x là số thứ tự của bộ test (bắt đầu từ \(1\)) và y là kích thước của tập con lớn nhất gồm các từ thỏa mãn những tiêu chí nêu trên.

Ràng buộc

  • \(1 \le T \le 100\).
  • \(1 \le |W_i| \le 50\) với mọi \(i\).
  • \(W_i\) chỉ gồm các chữ cái tiếng Anh in hoa với mọi \(i\).
  • \(W_i \ne W_j\) với mọi \(i \ne j\) (các từ không lặp lại trong cùng một bộ test).

Phân nhóm

Test Set 1 (Hiển thị)

  • \(2 \le N \le 6\).

Test Set 2 (Ẩn)

  • \(2 \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 10/37 27,03%
Test Set 2 27/37 72,97%

Ví dụ

Ví dụ 1

Input
4
2
TARPOL
PROL
3
TARPOR
PROL
TARPRO
6
CODEJAM
JAM
HAM
NALAM
HUM
NOLOM
4
PI
HI
WI
FI
Output
Case #1: 2
Case #2: 0
Case #3: 6
Case #4: 2
Giải thích

Trong trường hợp mẫu số 1, với cách gán trọng âm thích hợp như đã mô tả ở trên, hai từ có thể gieo vần; vì vậy, tập con lớn nhất chính là toàn bộ dữ liệu vào.

Trong trường hợp mẫu số 2, bất kể gán trọng âm như thế nào, không có hai từ nào có thể gieo vần vì hai hậu tố bất kỳ đều khác nhau ít nhất ở chữ cái cuối cùng. Do đó, tập con lớn nhất là tập rỗng, có kích thước \(0\).

Trong trường hợp mẫu số 3, ta có thể dùng toàn bộ tập từ nếu đặt trọng âm của CODEJAMJAM tại các chữ J, của HAMNALAM tại các chữ A cuối cùng, và của HUMNOLOM tại các chữ M.

Trong trường hợp mẫu số 4, hai từ bất kỳ đều có thể được làm cho gieo vần, nhưng luôn phải đặt chữ cái mang trọng âm là I. Vì vậy, nếu đưa hai cặp vào tập con thì các từ thuộc hai cặp khác nhau cũng sẽ gieo vần. Do đó, ta chỉ có thể tạo một tập con kích thước \(2\) bằng cách chọn hai từ bất kỳ trong dữ liệu vào.

Nguồn

Google Code Jam 2019, Vòng 1A, bài Alien Rhyme.

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: