結果

問題 No.1017 Reiwa Sequence
ユーザー 👑 SPD_9X2
提出日時 2025-07-16 01:09:02
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,522 bytes
コンパイル時間 376 ms
コンパイル使用メモリ 82,588 KB
実行使用メモリ 282,668 KB
最終ジャッジ日時 2025-07-16 01:09:41
合計ジャッジ時間 35,605 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 49 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

"""

https://yukicoder.me/problems/no/1017

300000ペア以上あれば、必ず衝突する

長さ600以下の場合、ちゃんと考えないとダメか?
dpして復元かなぁ...
しかし、A[i]が大きい場合に苦しい

3つ、4つと増やしていけばいいか
重複はない

"""

import sys

N = int(input())

A = list(map(int,input().split()))

adic = {}

for i in range(N):
    if A[i] not in adic:
        adic[A[i]] = []
    adic[A[i]].append(i)

vk = [ (len(adic[i]),i) for i in adic ]
vk.sort()
vk.reverse()

if vk[0][0] >= 2:
    k1 = vk[0][1]
    ans = [0] * N
    for i in adic[k1][:2]:
        ans[i] = (-1)**i * A[i]

    print ("Yes")
    print (*ans)
    sys.exit()



dic = {}

def check( pos ):
    s = 0
    for p in pos:
        s += A[p]
    if s in dic:
        ans = [0] * N
        for p in dic[s]:
            ans[p] = -1 * A[p]
        for p in pos:
            ans[p] = 1 * A[p]

        print ("Yes")
        print (*ans)
        sys.exit()

    dic[s] = pos

for i in range(N):
    check( (i,) )

for i in range(N):
    for j in range(i):
        check( (i,j) )

for i in range(N):
    for j in range(i):
        for k in range(j):
            check( (i,j,k) )

for i in range(N):
    for j in range(i):
        for k in range(j):
            for l in range(k):
                check( (i,j,k,l) )


for i in range(N):
    for j in range(i):
        for k in range(j):
            for l in range(k):
                for m in range(l):
                    check( (i,j,k,l,m) )


for i in range(N):
    for j in range(i):
        for k in range(j):
            for l in range(k):
                for m in range(l):
                    for x in range(m):
                        check( (i,j,k,l,m,x) )


for i in range(N):
    for j in range(i):
        for k in range(j):
            for l in range(k):
                for m in range(l):
                    for x in range(m):
                        for y in range(x):
                            check( (i,j,k,l,m,x,y) )


for i in range(N):
    for j in range(i):
        for k in range(j):
            for l in range(k):
                for m in range(l):
                    for x in range(m):
                        for y in range(x):
                            for z in range(y):
                                check( (i,j,k,l,m,x,y,z) )


for bit in range(2**N):
    pos = []
    for i in range(N):
        if (2**i) & bit:
            pos.append(i)
    if len(pos) > 8:
        check( tuple(pos) )

print ("No")

0