コンテンツにスキップ

Blitz Round #25 A - Sum vs MEX

サイト
EOLYMP
コンテスト
Blitz Round #25
問題
A - Sum vs MEX

11 から nn の順列 pp のうち、すべての ii (1≤i≤n1 \le i \le n) について

∑j=1ipj が MEX(p1,…,pi) で割り切れる\sum_{j=1}^{i} p_j \text{ が } \mathrm{MEX}(p_1, \ldots, p_i) \text{ で割り切れる}

を満たすものを 1 つ構築するか、存在しないことを判定する問題です。ここでの MEX\mathrm{MEX} は「含まれない最小の正の整数」です。

  • 1≤n≤2⋅1051 \le n \le 2 \cdot 10^5、テストケースの nn の総和は 2⋅1052 \cdot 10^5 以下

正確な問題文は元の問題ページを見てください。

i=ni = n のとき、p1,…,pnp_1, \ldots, p_n には 11 から nn がすべて含まれるので MEX=n+1\mathrm{MEX} = n + 1、総和は n(n+1)2\frac{n(n+1)}{2} です。

n(n+1)2÷(n+1)=n2\frac{n(n+1)}{2} \div (n + 1) = \frac{n}{2}

なので、割り切れるのは nn が偶数のときだけです。よって nn が奇数なら答えは NO です。

nn が偶数のとき:11 を最後に置く

Section titled “nnn が偶数のとき:111 を最後に置く”

11 を最後に置くと、i<ni < n では p1,…,pip_1, \ldots, p_i に 11 が含まれないので MEX=1\mathrm{MEX} = 1 となり、条件は常に満たされます。

i=ni = n のときは上で見たとおり、nn が偶数なら割り切れます。

したがって、たとえば p=(2,3,…,n,1)p = (2, 3, \ldots, n, 1) が条件を満たします。

Python
for _ in range(int(input())):
N = int(input())
if N & 1:
print("NO")
else:
ans = list(range(2, N + 1)) + [1]
print("YES")
print(*ans)