結果
問題 | No.1606 Stuffed Animals Keeper |
ユーザー | shotoyoo |
提出日時 | 2021-07-16 22:20:23 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 247 ms / 3,000 ms |
コード長 | 1,088 bytes |
コンパイル時間 | 189 ms |
コンパイル使用メモリ | 81,896 KB |
実行使用メモリ | 79,600 KB |
最終ジャッジ日時 | 2024-07-06 09:43:21 |
合計ジャッジ時間 | 6,529 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 48 |
ソースコード
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)) def runlength(s): if not s: return [] c = s[0] v = 1 n = len(s) l = [] for i in range(1, n): if c==s[i]: v += 1 else: l.append((c,v)) c = s[i] v = 1 l.append((c,v)) return l n = int(input()) a = list(map(int, input().split())) res = runlength(a) l = [] tmp = [0,0] for c,v in res: if c==2: if sum(tmp)>0: l.append(tmp) tmp = [0,0] else: tmp[c] += v if sum(tmp)>0: l.append(tmp) d = {0: 0} for a,b in l: nd = {} for k,v in d.items(): nk = k+a nv = v nd.setdefault(nk,10**12) nd[nk] = min(nd[nk], nv) nk = k-b nv = v+b nd.setdefault(nk,10**12) nd[nk] = min(nd[nk], nv) d = nd if 0 in d: ans = d[0] else: ans = -1 print(ans)