D - |A + A| Editorial
by
sounansya
小さいケースで実験すると、以下のケースでのみ答えが No
になることが分かります。
- \(K=2\) かつ \(M\) が \(2\) の倍数ではない。
- \(K=4\) かつ \(M\) が \(4\) の倍数ではない。
実際に、大きいケースでもこれらのケースの答えは No
になります。
[1] \(K=2\) かつ \(M\) が \(2\) の倍数ではない場合
合同式は全て \(\text{mod}\ M\) で考えます。
まず、 \(K=2\) より \(A\) の長さは \(2\) である必要があります。(ただし \(A_1\neq A_2\))
\(A_i+A_j\) として表される値は \(2A_1,2A_2,A_1+A_2\) の \(3\) 通りです。これらのうちどれか \(2\) つが \(\text{mod}\ M\) で同じ値である必要があります。 \(A_1 \neq A_2\) と \(M\) が奇数であることから \(2A_1 \not\equiv 2A_2 \pmod M\) が成り立つので、 \(A_1+A_2\) と \(2A_1,2A_2\) のどちらかが \(\text{mod}\ M\) で同じ値である必要があります。しかし、 \(2A_1\equiv A_1+A_2\) とすると \(A_1\equiv A_2\) となり、これは \(A_1\neq A_2\) に矛盾します。\(2A_2\equiv A_1+A_2\) の場合も同様です。
[2] \(K=4\) かつ \(M\) が \(4\) の倍数ではない場合
\(A\) の長さが \(2\) 以下ならば \(k\) としてあり得る値は \(3\) 種類以下です。一方、 \(A\) の長さが \(5\) 以上ならば \(k\) としてあり得る値は \(5\) 種類以上になります。したがって、 \(A\) の長さとしてあり得る値は \(3,4\) の \(2\) つのみです。
[2-1] \(A\) の長さが \(3\) の場合
\(A=(a,b,c)\) (\(a,b,c\) は互いに相異なる)とします。
このとき、 \(2a,2b,2c,a+b,b+c,a+c\) のうちちょうど \(2\) 組が \(\text{mod}\ M\) で同じ値である必要があります。
それぞれの値を頂点として考え、\(\text{mod}\ M\) で同じ値ならば辺を結ぶようなグラフを考えると対称性より \(2a\) と \(b+c\) 、 \(2b\) と \(2c\) がそれぞれ \(\text{mod} \ M\) で同じ値である場合のみ考えれば良いです。
\(M\) が奇数ならば \(2b\equiv 2c\pmod M\) より \(b\equiv c\pmod M\) が言えますが、このとき \(2a\equiv b+c\equiv 2c\pmod M\) となり不適です。
\(M\) が偶数なら \(b\equiv c\pmod M\) または \(\displaystyle b\equiv c+\frac{M}{2} \pmod M\) となりますが、前者は奇数の場合と同じように不適で、後者も \(\displaystyle 2a-2b\equiv b+c-2b\equiv \frac{M}2\pmod M\) より不適です。
[2-2] \(A\) の長さが \(4\) の場合
\(A=(a,b,c,d)\) (\(a,b,c,d\) は互いに相異なる)とします。
\(B_x=(a+x,b+x,c+x,d+x) \pmod M\) とします(つまり、各要素を全て \(\text{mod}\ M\) で割ったとする)。このとき、\(B_x\) の各要素は相異なるので \(B_a,B_b,B_c,B_d\) は全て集合として一致します。よって、 \(A\) の公差、つまり \(b-a,c-b,d-c,a-d\) は \(\text{mod}\ M\) で全て等しい必要がありますが、 \(M\) は \(4\) の倍数ではないのでそのような \(A\) を構築することは不可能です。
以上が No
の場合の証明です。これ以外のケースは全て Yes
で、以下のように構築することができます。
- \(K=M\) の場合:\(\displaystyle A=(0,1,\ldots,M-1)\)
- \(K=2\) の場合: \(\displaystyle A=(0,M/2)\)
- \(K=4\) の場合: \(\displaystyle A=(0,M/4,2M/4,3M/4)\)
- \(K\) が \(6\) 以上の偶数の場合: \(\displaystyle A=(0,2,3,\ldots,K/2)\)
- \(K\) が奇数の場合: \(\displaystyle A=(0,1,2,\ldots,(K-1)/2)\)
上 \(2\) つは明らかで、\(K\) が偶数の場合は \(0,2,3,\ldots,K\) の \(K\) 種類が、 \(K\) が奇数の場合は \(0,1,2,\ldots,K-1\) の \(K\) 種類が現れることが分かります。
for _ in range(int(input())):
def y(a):
print("Yes")
print(len(a))
print(*a)
m, k = map(int, input().split())
if m == k:
y([i for i in range(m)])
continue
if k == 2:
if m % 2 == 0:
y([0, m // 2])
continue
print("No")
continue
if k == 4:
if m % 4 == 0:
y([0, m // 4, m // 2, 3 * m // 4])
continue
print("No")
continue
if k % 2 == 1:
y([i for i in range((k + 1) // 2)])
continue
a = [i + 1 for i in range(k // 2)]
a[0] = 0
y(a)
posted:
last update: