結果
| 問題 |
No.1017 Reiwa Sequence
|
| ユーザー |
|
| 提出日時 | 2021-04-29 02:10:44 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,298 bytes |
| コンパイル時間 | 296 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 226,816 KB |
| 最終ジャッジ日時 | 2024-07-08 01:18:56 |
| 合計ジャッジ時間 | 42,024 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 37 WA * 13 |
ソースコード
def zeta(A,merge):
"""
N=20程度まで
A = 2^N 通り のフラグの立ち方に対する値。これをゼータ変換で累積していく。
"""
_N = (len(A)-1).bit_length()
dp = A[:]
for k in range(_N):
bit=1<<k
for i in range(1<<_N):
if i&bit:
dp[i]=merge(dp[i^bit],dp[i])
return dp
def main():
used={}
for bit in range(1<<N):
s=S[bit]
if s==0:
continue
if s not in used:
used[s]=bit
else:
res=[0]*N
bit2=used[s]
for i in range(N):
cnt=0
if bit&(1<<i):
cnt+=1
if bit2&(1<<i):
cnt-=1
res[i]=cnt*AA[i]
return res
return -1
###############################################################################
import sys
input = sys.stdin.readline
N=int(input())
AA=list(map(int, input().split()))
res=[0]*N
if len(AA)>22:
AA=AA[:22]
N=22
A=[0]*(1<<N)
for i in range(len(AA)):
A[1<<i]=AA[i]
###################################
def merge(x,y):
return x+y
S=zeta(A,merge)
###################################
res=main()
if res==-1:
print("No")
else:
print("Yes")
print(*res)