Google Code Jam 2020 - Pattern Matching

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

Đề bài

Nhiều trình dòng lệnh dùng dấu sao (*) để biểu thị "một chuỗi bất kỳ", kể cả chuỗi rỗng. Chẳng hạn, khi liệt kê các tệp khớp với BASH*, trình dòng lệnh có thể liệt kê BASH, BASHERBASHFUL. Với *FUL, nó có thể liệt kê BEAUTIFUL, AWFULBASHFUL. Khi liệt kê B*L, nó có thể liệt kê BASHFUL, BEAUTIFULBULL.

Trong bài này, nói một cách hình thức, một mẫu là một chuỗi chỉ gồm các chữ cái tiếng Anh in hoa và các dấu sao (*), còn một tên là một chuỗi chỉ gồm các chữ cái tiếng Anh in hoa. Mẫu \(p\) khớp với tên \(m\) nếu ta có thể thay mỗi dấu sao trong \(p\) bằng một chuỗi (có thể rỗng) để thu được \(m\). Lưu ý rằng mỗi dấu sao có thể được thay bằng một chuỗi khác nhau.

Cho \(N\) mẫu, bạn có thể tìm một tên duy nhất gồm không quá \(10^4\) chữ cái và đồng thời khớp với tất cả các mẫu đó, hay xác định rằng điều này là không thể?

Dữ liệu vào

Dòng đầu tiên của dữ liệu vào 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 một số nguyên \(N\): số lượng mẫu cần được khớp đồng thời. Sau đó là \(N\) dòng, mỗi dòng chứa một chuỗi \(P_i\) biểu diễn mẫu thứ \(i\).

Dữ liệu ra

Với mỗi bộ test, in một dòng có dạng Case #x: y, trong đó x là số thứ tự của bộ test (bắt đầu từ 1), còn y là một tên bất kỳ gồm không quá \(10^4\) chữ cái sao cho mỗi \(P_i\) đều khớp với y theo định nghĩa trên; nếu không tồn tại tên như vậy, in * (tức là chỉ một dấu sao).

Ràng buộc

  • \(1 \le T \le 100\).
  • \(2 \le N \le 50\).
  • \(2 \le \operatorname{length}(P_i) \le 100\) với mọi \(i\).
  • Mỗi ký tự của \(P_i\) là một chữ cái tiếng Anh in hoa hoặc một dấu sao (*), với mọi \(i\).
  • Ít nhất một ký tự của \(P_i\) là một chữ cái tiếng Anh in hoa, với mọi \(i\).

Phân nhóm

Test Set 1 (Visible Verdict)

  • Trong mỗi \(P_i\) có đúng một ký tự là dấu sao (*).
  • Ký tự ngoài cùng bên trái của mỗi \(P_i\) chính là dấu sao (*) duy nhất đó.

Test Set 2 (Visible Verdict)

  • Trong mỗi \(P_i\) có đúng một ký tự là dấu sao (*).

Test Set 3 (Visible Verdict)

  • Trong mỗi \(P_i\) có ít nhất một ký tự là dấu sao (*).

Đ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 5/28 17,86%
Test Set 2 5/28 17,86%
Test Set 3 18/28 64,28%

Ví dụ

Ví dụ 1

Input
2
5
*CONUTS
*COCONUTS
*OCONUTS
*CONUTS
*S
2
*XZ
*XYZ
Output
Case #1: COCONUTS
Case #2: *
Giải thích

Trong trường hợp mẫu số 1, còn có các đáp án khả dĩ khác, trong đó có COCOCONUTSILIKECOCONUTS. Cả COCONUTSAREGREAT lẫn COCOANUTS đều không được chấp nhận. Lưu ý rằng cùng một mẫu có thể xuất hiện nhiều lần trong một bộ test.

Trong trường hợp mẫu số 2, không có tên nào được chấp nhận, vì vậy đáp án là *.

Các trường hợp sau không thể xuất hiện trong Test Set 1, nhưng có thể xuất hiện trong Test Set 2 hoặc Test Set 3:

  4
  H*O
  HELLO*
  *HELLO
  HE*

HELLOHELLOGOODBYEHELLO là những ví dụ về đáp án được chấp nhận. OTHELLOHELLOO thì không được chấp nhận.

  2
  CO*DE
  J*AM

Không có tên nào khớp với cả hai mẫu, vì vậy đáp án sẽ là *.

  2
  CODE*
  *JAM

CODEJAM là một ví dụ về đáp án được chấp nhận.

Các trường hợp sau không thể xuất hiện trong Test Set 1 hoặc Test Set 2, nhưng có thể xuất hiện trong Test Set 3:

  2
  A*C*E
  *B*D*

ABCDEABUNDANCE là hai trong số các đáp án có thể được chấp nhận, còn BOLDFACE thì không.

  2
  A*C*E
  *B*D

Không có tên nào khớp với cả hai mẫu, vì vậy đáp án sẽ là *.

  2
  **Q**
  *A*

QUAILAQ là hai trong số các đáp án có thể được chấp nhận ở đây.

Nguồn

Google Code Jam 2020, Vòng 1A, bài Pattern Matching.

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: