Google Code Jam 2018 - Mysterious Road Signs
Xem PDFMysterious Road Signs
Thị trấn Signfield nằm trên một con đường thẳng hoàn hảo và dài vô hạn chạy từ tây sang đông. Dọc theo con đường có một dãy \(S\) biển báo bí ẩn với các con số ở cả hai mặt. Biển thứ \(i\) (được đánh số theo thứ tự từ tây sang đông) nằm tại một điểm cách Signfield \(D_i\) kilômét về phía đông, có số \(A_i\) ở mặt quay về phía tây và số \(B_i\) ở mặt quay về phía đông.
Không ai ở Signfield biết những biển báo này muốn nói gì. Bạn cho rằng các số ở mặt phía tây dành cho tài xế đi về hướng đông và biểu thị khoảng cách đến một địa điểm cụ thể nào đó. Tương tự, bạn cho rằng các số ở mặt phía đông dành cho tài xế đi về hướng tây và biểu thị khoảng cách đến một địa điểm cụ thể nào đó. Tuy nhiên, bạn nghi ngờ rằng không phải tất cả biển báo đều nhất quán với giả thuyết này.
Để bắt đầu kiểm chứng giả thuyết, bạn muốn tìm các tập biển báo hợp lệ tuân theo những quy tắc sau:
- Tập đó là một dãy con liên tiếp của toàn bộ dãy biển báo. (Cả toàn bộ dãy cũng được tính là một dãy con liên tiếp.)
- Tồn tại hai vị trí \(M\) và \(N\) kilômét về phía đông Signfield, trong đó \(M\) và \(N\) là các số không nhất thiết dương và không nhất thiết phân biệt, sao cho với mỗi biển trong tập, ít nhất một trong hai điều sau đúng:
- \(D_i+A_i=M\).
- \(D_i-B_i=N\).
Số biển lớn nhất có thể có trong một tập hợp lệ như mô tả ở trên là bao nhiêu, và có bao nhiêu tập hợp lệ khác nhau có kích thước đó?
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ộ bắt đầu bằng một dòng chứa số nguyên \(S\): số biển báo. Sau đó có thêm \(S\) dòng. Dòng thứ \(i\) mô tả biển thứ \(i\) (theo thứ tự từ tây sang đông) và chứa ba số nguyên \(D_i\), \(A_i\), \(B_i\): khoảng cách của biển về phía đông Signfield (tính bằng kilômét), số trên mặt phía tây và số trên mặt phía đông.
Dữ liệu ra
Với mỗi bộ test, in một dòng Case #x: y z, trong đó x là số thứ tự bộ test (bắt đầu từ 1), còn y và z lần lượt là số biển lớn nhất có thể có trong một tập hợp lệ và số tập hợp lệ có kích thước đó, như mô tả trong đề bài.
Ràng buộc
- \(1\le T\le60\).
- \(1\le D_i\le10^6\) với mọi \(i\).
- \(D_i<D_j\) với mọi \(i<j\).
- \(1\le A_i\le10^6\) với mọi \(i\).
- \(1\le B_i\le10^6\) với mọi \(i\).
Phân nhóm
Test Set 1 (Hiển thị): \(1\le S\le100\) trong mọi bộ test.
Test Set 2 (Ẩn): \(1\le S\le100\) trong tất cả trừ 3 bộ test; trong 3 bộ test còn lại, \(S=10^5\).
Đ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/30 | 33,33% |
| Test Set 2 | 20/30 | 66,67% |
Ví dụ
Ví dụ 1
Input
3
1
1 1 1
5
2 7 12
6 3 11
8 10 1
11 11 12
13 9 14
5
1 3 3
2 2 2
3 1 1
4 2 2
5 3 3
Output
Case #1: 1 1
Case #2: 3 2
Case #3: 5 1
Giải thích
Trong Ví dụ #1, chỉ có một biển báo. Nếu chọn riêng biển đó làm tập, có nhiều giá trị \(M\) và \(N\) có thể dùng được, chẳng hạn:
- \(M=2\) và \(N=0\).
- \(M=1\) và \(N=0\). (Hãy nhớ rằng mỗi biển chỉ cần đúng đối với một trong hai giá trị của nó; ngoài ra, \(M\) và \(N\) có thể nằm cùng vị trí với một hay nhiều biển báo, hoặc với chính Signfield.)
- \(M=2\) và \(N=-12345\). (\(N\) có thể nằm về phía tây Signfield.)
- \(M=0\) và \(N=0\). (\(M\) và \(N\) không nhất thiết phân biệt.)
- \(M=2\) và \(N=3\). (\(N\) có thể nằm về phía đông của \(M\).)
Vì vậy, tập chỉ gồm một biển đó là hợp lệ. Đây là tập duy nhất có độ dài ấy, nên đáp án là 1 1.
Trong Ví dụ #2, lưu ý rằng biển thứ nhất, thứ hai, thứ tư và thứ năm sẽ nhất quán với \(M=9\) và \(N=-1\), nhưng chúng không tạo thành một dãy con liên tiếp. (Số 1 ở mặt sau của biển thứ ba không thể được dùng như thể nó nằm ở mặt trước.) Thực tế không có tập hợp lệ nào gồm bốn biển. Có hai tập hợp lệ khác nhau gồm ba biển. Lưu ý rằng mặc dù có hai cặp \(M/N\) khác nhau khiến tập ba biển thứ hai hợp lệ, tập đó chỉ được tính một lần:
- biển thứ nhất, thứ hai và thứ ba, với \(M=9\) và \(N=7\);
- biển thứ ba, thứ tư và thứ năm, với \(M=18\), \(N=-1\), hoặc với \(M=22\), \(N=7\).
Trong Ví dụ #3, toàn bộ dãy là một tập hợp lệ với \(M=4\) và \(N=2\).
Nguồn
Google Code Jam 2018, Vòng 1B, bài Mysterious Road Signs.
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 2018 - Round 1B (29 Tháng tư, 2018)
Bình luận