結果
問題 | No.137 貯金箱の焦り |
ユーザー |
|
提出日時 | 2022-02-27 00:43:06 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,490 bytes |
コンパイル時間 | 253 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 317,624 KB |
最終ジャッジ日時 | 2024-07-04 22:10:55 |
合計ジャッジ時間 | 8,709 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 9 TLE * 1 -- * 13 |
ソースコード
class DualSegmentTree:def __init__(self, n, segfunc, ide_ele):self.segfunc = segfuncself.ide_ele = ide_eleself.num = 1 << (n - 1).bit_length()self.tree = [ide_ele] * 2 * self.numdef update(self,l,r,x):l += self.numr += self.numwhile l < r:if l & 1:self.tree[l] = self.segfunc(self.tree[l],x)l += 1if r & 1:self.tree[r-1] = self.segfunc(self.tree[r-1],x)l >>= 1r >>= 1def __getitem__(self,idx):idx += self.numres = self.ide_elewhile idx:res = self.segfunc(res,self.tree[idx])idx>>=1return resimport sys,random,bisectfrom collections import deque,defaultdictfrom heapq import heapify,heappop,heappushfrom itertools import permutationsfrom math import log,gcdinput = lambda :sys.stdin.readline().rstrip()mi = lambda :map(int,input().split())li = lambda :list(mi())mod = 1234567891N,M = mi()A = li()dp = {0:1}for k in range(60):t = 2**kfor j in range(N):ndp = {s:dp[s] for s in dp}for s in dp:if s+A[j]*t > M:continueif s+A[j]*t not in ndp:ndp[s+A[j]*t] = 0ndp[s+A[j]*t] += dp[s]ndp[s+A[j]*t] %= moddp = ndpdp = {s:dp[s] for s in dp if s%(2*t)==M%(2*t)}if M in dp:print(dp[M])else:print(0)