結果
問題 | No.1017 Reiwa Sequence |
ユーザー |
|
提出日時 | 2021-05-09 11:59:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 592 ms / 2,000 ms |
コード長 | 1,238 bytes |
コンパイル時間 | 168 ms |
コンパイル使用メモリ | 81,712 KB |
実行使用メモリ | 279,340 KB |
最終ジャッジ日時 | 2024-09-18 18:13:11 |
合計ジャッジ時間 | 44,411 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 50 |
ソースコード
import sys input = lambda : sys.stdin.readline().rstrip() sys.setrecursionlimit(2*10**5+10) write = lambda x: sys.stdout.write(x+"\n") debug = lambda x: sys.stderr.write(x+"\n") writef = lambda x: print("{:.12f}".format(x)) n = int(input()) a = list(map(int, input().split())) s = set([0]) done = 0 for v in a: if v in s: val = v done = 1 break ns = set() for vv in s: if v+vv in s: val = v+vv done = 1 break ns.add(v+vv) s |= ns if done: break if not done: print("No") else: print("Yes") d = {0: None} res = [] def get(v): assert v in d index = [] while d[v] is not None: ind = d[v] index.append(ind) v -= a[ind] return index for i,v in enumerate(a): nd = {} for vv in d: if v+vv==val: index = get(vv) index.append(i) res.append(index) nd[v+vv] = i d.update(nd) if len(res)>=2: break ans = [0]*n for i in res[0]: ans[i] += a[i] for i in res[1]: ans[i] -= a[i] write(" ".join(map(str, ans)))