Google Code Jam 2020 - Naming Compromise

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

Cameron và Jamie sắp chào đón em bé thứ hai. Họ vốn đã phối hợp ăn ý trong vai trò cha mẹ, nhưng lúc này lại bất đồng về một việc vô cùng quan trọng! Cameron muốn đặt cho em bé một cái tên (chuỗi C), còn Jamie lại muốn đặt một cái tên khác (chuỗi J).

Bạn muốn giúp họ tìm một tên thỏa hiệp gần nhất có thể với mong muốn của mỗi người. Bạn cho rằng có thể làm điều này bằng khái niệm khoảng cách chỉnh sửa. Khoảng cách chỉnh sửa giữa hai chuỗi \(S_1\)\(S_2\) là số phép toán ít nhất cần thực hiện để biến đổi \(S_1\) thành \(S_2\), trong đó các phép toán được phép là:

  • Chèn một ký tự vào vị trí bất kỳ trong chuỗi.
  • Xóa một ký tự khỏi vị trí bất kỳ trong chuỗi.
  • Đổi một ký tự trong chuỗi thành một ký tự bất kỳ khác.

Ví dụ, khoảng cách chỉnh sửa giữa CAMERONJAMIE là 5. Một cách thực hiện phép biến đổi trong 5 bước là: CAMERON thành JAMERON (đổi), thành JAMIERON (chèn), thành JAMIEON (xóa), thành JAMIEN (xóa), rồi thành JAMIE (xóa). Mọi cách biến đổi CAMERON thành JAMIE đều cần ít nhất từng ấy phép toán.

Để tên thỏa hiệp \(N\) gần nhất có thể với mong muốn ban đầu của cha mẹ, bạn muốn \(N\) là một chuỗi không rỗng sao cho tổng khoảng cách chỉnh sửa giữa C\(N\) với khoảng cách chỉnh sửa giữa J\(N\) là nhỏ nhất có thể. Trong tất cả các lựa chọn \(N\) như vậy, để bảo đảm sự thỏa hiệp là công bằng, bạn phải chọn một \(N\) sao cho hiệu tuyệt đối giữa hai khoảng cách chỉnh sửa đó cũng nhỏ nhất có thể. Hãy tìm một tên thỏa hiệp cho Cameron và Jamie.

Dữ liệu vào

Dòng đầu tiên cho biết số lượng bộ test T. Tiếp theo là T bộ test. Mỗi bộ gồm một dòng chứa hai chuỗi CJ, lần lượt là những cái tên Cameron và Jamie đề xuất cho em bé. Mỗi tên chỉ gồm các chữ cái tiếng Anh viết hoa.

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ự bộ test (bắt đầu từ 1) và y là một cái tên đáp ứng các yêu cầu đã nêu. Lưu ý rằng y chỉ được chứa các chữ cái tiếng Anh viết hoa.

Ràng buộc

  • \(1 \leq \mathbf{T} \leq 100\).
  • \(\mathbf{C} \neq \mathbf{J}\).

Phân nhóm

Test Set 1 (Phán quyết hiển thị)

  • \(1 \leq |\mathbf{C}| \leq 6\).
  • \(1 \leq |\mathbf{J}| \leq 6\).
  • Với mọi \(i\), ký tự thứ \(i\) của C là một trong các chữ cái viết hoa X, Y hoặc Z.
  • Với mọi \(i\), ký tự thứ \(i\) của J là một trong các chữ cái viết hoa X, Y hoặc Z.

Test Set 2 (Phán quyết ẩn)

  • \(1 \leq |\mathbf{C}| \leq 60\).
  • \(1 \leq |\mathbf{J}| \leq 60\).
  • Với mọi \(i\), ký tự thứ \(i\) của C là một chữ cái tiếng Anh viết hoa.
  • Với mọi \(i\), ký tự thứ \(i\) của J là một chữ cái tiếng Anh viết hoa.

Đ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 4/12 33,33%
Test Set 2 8/12 66,67%

Ví dụ

Ví dụ 1

Input
4
XYZZY ZZYZX
Y Z
YYXXYZ ZYYXXY
XZXZXZ YZ
Output
Case #1: ZZY
Case #2: Z
Case #3: ZYYXXYZ
Case #4: ZYZX
Giải thích

Các trường hợp trên đáp ứng giới hạn của Test Set 1. Một trường hợp mẫu khác không đáp ứng các giới hạn đó được đưa ra ở cuối phần này.

Trong trường hợp mẫu #1, khoảng cách chỉnh sửa từ XYZZY đến ZZY là 2 (xóa hai ký tự đầu tiên), và khoảng cách chỉnh sửa từ ZZYZX đến ZZY là 2 (xóa hai ký tự cuối cùng). XZZXZYYZY cũng là những đáp án đúng. Không có tên nào có tổng khoảng cách chỉnh sửa nhỏ hơn 4.

Chẳng hạn, ZY có cùng khoảng cách chỉnh sửa đến CJ (đều bằng 3). Tuy nhiên, tổng các khoảng cách đó là 6, không phải giá trị nhỏ nhất, nên đây không phải một đáp án được chấp nhận.

XZZY cũng không được chấp nhận. Khoảng cách chỉnh sửa từ nó đến CJ lần lượt là 1 và 3. Tổng hai khoảng cách chỉnh sửa này là nhỏ nhất, nhưng hiệu tuyệt đối giữa chúng (\(|1-3|=2\)) không nhỏ nhất, vì ta đã chỉ ra rằng có thể đạt hiệu bằng 0.

Trong trường hợp mẫu #2, YZ là hai đáp án duy nhất được chấp nhận.

Trong trường hợp mẫu #3, lưu ý rằng các giới hạn về độ dài dữ liệu vào không áp dụng cho dữ liệu ra, nên đáp án đã cho được chấp nhận trong cả hai test set. Một đáp án khác có thể là YYXXY.

Trong trường hợp mẫu #4, khoảng cách chỉnh sửa giữa XZXZXZZYZX là 3, còn khoảng cách chỉnh sửa giữa YZZYZX là 2. Tổng hai khoảng cách chỉnh sửa đó là 5 và hiệu tuyệt đối của chúng là 1; các giá trị này là tối ưu cho trường hợp này.

Trường hợp bổ sung sau đây không thể xuất hiện trong Test Set 1, nhưng có thể xuất hiện trong Test Set 2.

1
GCJ ABC

Case #1: GC là một trong những đầu ra đúng có thể có.

Nguồn

Google Code Jam 2020, Vòng 3, bài Naming Compromise.

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: