Câu hỏi này có một thiết lập tương tự để Tìm một mảng phù hợp với một tập hợp mặc dù khá khác nhau trong các mục tiêu của nó.
Hãy xem xét một mảng A
chiều dài n
. Mảng chỉ chứa số nguyên dương. Ví dụ A = (1,1,2,2)
. Hãy để chúng tôi định nghĩa f(A)
là tập hợp của tất cả các phân đoạn tiếp giáp không trống của A
. Trong trường hợp này f(A) = {1,2,3,4,5,6}
. Các bước để sản xuất f(A)
như sau:
Các subarrays của A
là (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Số tiền tương ứng của họ là 1,1,2,2,2,3,4,4,5,6
. Do đó, bộ bạn nhận được từ danh sách này là do {1,2,3,4,5,6}
.
Chúng tôi gọi một mảng A
duy nhất nếu không có mảng nào khác có B
cùng độ dài như vậy f(A) = f(B)
, ngoại trừ mảng bị A
đảo ngược. Ví dụ, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
nhưng không có mảng độ dài 3
nào khác tạo ra cùng một tập hợp tổng.
Chúng tôi sẽ chỉ xem xét các mảng trong đó các phần tử là một số nguyên cho trước s
hoặc s+1
. Ví dụ, nếu s=1
các mảng sẽ chỉ chứa 1
và 2
.
Bài tập
Nhiệm vụ, cho một n
và nhất định s
là đếm số lượng các mảng duy nhất có độ dài đó. Bạn có thể cho rằng đó s
là giữa 1
và 9
.
Bạn không nên đếm ngược lại của một mảng cũng như chính mảng đó.
Ví dụ
s = 1
, câu trả lời là luôn n+1
.
s = 2
, các câu trả lời đếm từ n = 1
lên là:
2,3,6,10,20,32,52,86
s = 8
, các câu trả lời đếm từ n = 1
lên là:
2,3,6,10,20,36,68,130
Ghi bàn
Đối với một n
mã nhất định , mã của bạn sẽ đưa ra câu trả lời cho tất cả các giá trị s
từ 1
đến 9
. Điểm của bạn là giá trị cao nhất n
mà điều này hoàn thành trong một phút.
Kiểm tra
Tôi sẽ cần chạy mã của bạn trên máy ubfox của mình, vì vậy vui lòng bao gồm các hướng dẫn chi tiết nhất có thể về cách biên dịch và chạy mã của bạn.
Bảng xếp hạng
- n = 24 của Anders Kaseorg ở Rust (34 giây)
- n = 16 bởi Ourous in Clean (36 giây)
- n = 14 của JRowan trong Lisp chung (49 giây)