Official

A - Sum of Reciprocals of Squares Editorial by sounansya


長さ \(n\) の正整数列 \(A=(A_1,A_2,\ldots,A_n)\)\(\displaystyle\sum_{i=1}^n\frac1{A_i^2}=1\) を満たす時、\(A\) を良い整数列と呼びます。

まず、小さいケースを全て試すことで \(N=2,3,5\) の場合の答えは No であることが分かります。

長さ \(N\) の整数列 \(A=(A_1,A_2,\ldots,A_N)\) が 良い整数列であるとき、\(A'=(A_2,A_3,\ldots,A_N,2A_1,2A_1,2A_1,2A_1)\) も良い整数列となります。

このことを用いると、\(N=1,6,8\) の場合の小さいケースを作ることができればそれを元に再帰的に \(A\) を構成できることが分かります。

そして、これらのケースでは以下が条件を満たします:

  • \(N=1\)\(A=(1)\)
  • \(N=6\)\(A=(2,2,2,3,3,6)\)
  • \(N=8\)\(A=(2,2,3,3,3,3,6,6)\)

これらをベースケースとして順番に構成することができます。

以上を適切に実装することでこの問題に正答することができます。

実装例(Python3)

import sys
from collections import deque

input = sys.stdin.readline
for _ in range(int(input())):
    n = int(input())
    if n in [2, 3, 5]:
        print("No")
        continue
    if n % 3 == 0:
        a = deque([2, 2, 2, 3, 3, 6])
    elif n % 3 == 1:
        a = deque([1])
    else:
        a = deque([2, 2, 3, 3, 3, 3, 6, 6])
    while len(a) < n:
        x = a.popleft()
        for i in range(4):
            a.append(2 * x)
    ans = list(a)
    print("Yes")
    print(*ans)

posted:
last update: