Camam 58 56 ký tự)
Một số ký tự không thể in được và một là một tab sẽ được xử lý bằng phần mềm StackExchange:
"¶3¬î¿Á· 7ÛÈmÈÚÚ¡"256b454b212f-{__W%.*A<1b+}qi*-4=
Bản demo trực tuyến . Điều này sẽ chạy trực tuyến với n = 400 trong khoảng ba giây.
Được mã hóa bởi xxd
:
0000000: 22b6 0233 93ac eebf c1b7 0609 3794 dbc8 "..3........7...
0000010: 6dc8 1015 dada a122 3235 3662 3435 3462 m......"256b454b
0000020: 3231 3266 2d7b 5f5f 5725 2e2a 413c 3162 212f-{__W%.*A<1b
0000030: 2b7d 7169 2a2d 343d +}qi*-4=
Giải trình
Một thang Möbius về cơ bản là một cái thang có hai cạnh phụ. Với một khu rừng bị hạn chế trên một cái thang, nó có thể được nâng lên từ 1 đến 4 khu rừng bị hạn chế trên thang Mobius. Các cạnh có thể được thêm vào miễn là không tạo đỉnh 3 hoặc chu kỳ. Độ của bốn góc và các mối liên kết của chúng tạo thành 116 lớp rừng bị hạn chế trên thang, mặc dù một số trong số chúng là tương đương do tính đối xứng của hình chữ nhật. Tôi đã viết một chương trình để phân tích các phần mở rộng của một bậc thang có độ dài n đến một chiều dài n + 1, và sau đó hợp nhất các lớp thành 26 lớp tương đương. Điều này cho một hình thức đóng
⎡⎣⎢⎢⎢1111⎤⎦⎥⎥⎥T⎡⎣⎢⎢⎢1120223021410110⎤⎦⎥⎥⎥n - 2⎡⎣⎢⎢⎢0100⎤⎦⎥⎥⎥+
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢221111122⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥T⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢210001030100001020112100120100010011101100010110000020100000010110001140100011122⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥n - 2⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢002200000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥+
⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1244113222344⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥T⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢0001001000000021001011000200200002000031004001002000011000001000100100000000010003002002000001000010000200101000000110002001001000101020000012100101101000220010010200004⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥n - 2⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1011201000121⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥
vì vậy các giá trị có thể được tính toán nhanh bằng cách thực hiện ba lần lặp lại tuyến tính và sau đó thêm chúng, nhưng điều này có vẻ không được hay lắm.
Tuy nhiên, nếu chúng ta lấy các yếu tố không thể thay đổi của các đa thức đặc trưng khác nhau và nhân với nhau một (bỏ qua bội số), chúng ta sẽ có một đa thức bậc 10 mang lại sự tái phát tuyến tính đơn lẻ.
Phương pháp xây dựng (58 ký tự)
qi:Q2*,Wa*e!{Wa/{_W%e<}%$}%_&{{,1>},2few:~{:-z(Q(%}%0-!},,
Bản demo trực tuyến . Nó sẽ chạy trực tuyến n=2
mà không có vấn đề và n=3
với một chút kiên nhẫn. Đối với n=1
nó gặp sự cố, nhưng vì OP đã chọn loại trừ trường hợp đó khỏi các yêu cầu nên nó không phải là vấn đề cơ bản.
Mổ xẻ
qi:Q e# Take input from stdin, parse to int, store in Q
2*,Wa*e! e# Take all permutations of (0, -1, 1, -1, 2, -1, ..., -1, 2*Q-1)
{ e# Map to canonical form...
Wa/ e# Split around the -1s
{_W%e<}% e# Reverse paths where necessary to get a canonical form
$ e# Sort paths
}%
_& e# Filter to distinct path sets
{ e# Filter to path sets with valid paths:
{,1>}, e# Ignore paths with fewer than two elements (can't be invalid; break 2ew)
2few:~ e# Break paths into their edges
{:-z(Q(%}% e# The difference between the endpoints of an edge should be +/-1 or Q (mod 2Q)
e# So their absolute values should be 1, Q, 2Q-1.
e# d => (abs(d)-1) % (Q-1) maps those differences, and no other possible ones, to 0
e# NB {:-zQ(%}% to map them all to 1 would save a byte, but wouldn't work for Q=2
0-! e# Test that all values obtained are 0
},
, e# Count the filtered distinct path sets
Một phiên bản hiệu quả hơn mất 98 byte:
qi2*:Q{a{__0=[1Q2/Q(]f+Qf%_&1$-\f{+E}~}:E~}/]{_W%>!},:MW=0{_{M\f{__3$_@&@:e<@|^{=}{^j}?}1b}{,)}?}j
Bản demo trực tuyến
Điều này xây dựng các đường dẫn có thể bằng cách tìm kiếm theo chiều sâu, sau đó sử dụng hàm ghi nhớ để đếm các khu rừng bị hạn chế có thể cho một tập hợp các đỉnh nhất định. Hàm này hoạt động đệ quy trên cơ sở rằng bất kỳ khu rừng bị hạn chế nào cho một tập hợp các đỉnh không trống nhất định bao gồm một đường dẫn chứa đỉnh nhỏ nhất và một khu rừng bị hạn chế bao phủ các đỉnh không nằm trong đường dẫn đó.
34, 241, 1582, 10204, 65197, 415076, 2638366, 16759249, 106427154, 675771276, 4290678337
. Tôi không chắc tại sao đầu vào1
cũng không bắt buộc, với đầu ra2
.