結果
| 問題 |
No.1017 Reiwa Sequence
|
| ユーザー |
|
| 提出日時 | 2021-06-29 19:28:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 286 ms / 2,000 ms |
| コード長 | 1,067 bytes |
| コンパイル時間 | 173 ms |
| コンパイル使用メモリ | 82,924 KB |
| 実行使用メモリ | 146,744 KB |
| 最終ジャッジ日時 | 2024-06-25 21:52:34 |
| 合計ジャッジ時間 | 39,828 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 50 |
ソースコード
n=int(input())
a=list(map(int,input().split()))
"""
1<=n<=150000
1<=ai<=150000
n<=sum(a)<=1.5^2*10^10
とりうる部分和は2^n-1
2^n-1<sum(a)なら鳩の巣原理より
ある数値kがあり部分和がkとなるaの部分列の取り方が複数ある。
nが十分大ならYes
->22以上ならOKなのでaを小さく取って全探索
"""
if n==1:
print('No')
elif n==2:
if a[0]==a[1]:
print('Yes')
print(a[0],-a[1])
else:
print('No')
else:
b=[a[0],a[1]]
sumb=a[0]+a[1]
for x in a[2:]:
if sumb<pow(2,len(b))-1:break
b.append(x)
sumb+=x
d={}
m=len(b)
for i in range(1<<m):
key=0
for j in range(m):
if (i>>j)&1:
key+=a[j]
if key in d:
sub0=d[key]
sub1=i
u=sub0&sub1
sub0-=u
sub1-=u
ans=[]
for j in range(m):
if (sub0>>j)&1:
ans.append(a[j])
elif (sub1>>j)&1:
ans.append(-a[j])
else:
ans.append(0)
ans+=[0]*(n-m)
print('Yes')
print(*ans)
exit()
d[key]=i
print('No')