Project Euler 265

Project Euler 265

题目

Binary Circles

2N binary digits can be placed in a circle so that all the N-digit clockwise subsequences are distinct.

For N=3, two such circular arrangements are possible, ignoring rotations:

For the first arrangement, the 3-digit subsequences, in clockwise order, are: 000,001,010,101,011,111,110 and 100.

Each circular arrangement can be encoded as a number by concatenating the binary digits starting with the subsequence of all zeros as the most significant bits and proceeding clockwise. The two arrangements for N=3 are thus represented as 23 and 29:

000101112=23000111012=29

Calling S(N) the sum of the unique numeric representations, we can see that S(3)=23+29=52. Find S(5).

解决方案

本题没有太多需要注意的地方。直接把一个个二进制数视为一个节点,每个节点都有两条出边。然后再在图上寻找哈密顿回路即可。

OEIS 上的数列 A016031 提到,2N N 比特串上述的环排列一共有 22N1N 个。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
N = 5
M = 1 << N
mask = (1 << N) - 1
g = [[i << 1 & mask, (i << 1 | 1) & mask] for i in range(M)]
vis = [0 for i in range(M)]
vis[0] = 1
ans = 0


def dfs(f: int, u: int, s: int):
if f == M - 1:
if u == (M >> 1):
global ans
ans += s >> (N - 1)
return
for v in g[u]:
if vis[v]:
continue
vis[v] = 1
dfs(f + 1, v, s << 1 | (v & 1))
vis[v] = 0


dfs(0, 0, 0)
print(ans)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
Ujimatsu Chiya 微信 微信
Ujimatsu Chiya 支付宝 支付宝