結果
| 問題 |
No.1929 Exponential Sequence
|
| コンテスト | |
| ユーザー |
ygd.
|
| 提出日時 | 2022-05-06 23:39:33 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 168 ms / 2,000 ms |
| コード長 | 1,881 bytes |
| コンパイル時間 | 166 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 18,564 KB |
| 最終ジャッジ日時 | 2024-09-14 03:54:25 |
| 合計ジャッジ時間 | 2,766 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 24 |
ソースコード
import sys
#input = sys.stdin.readline
#input = sys.stdin.buffer.readline #文字列はダメ
#sys.setrecursionlimit(1000000)
import bisect
#import itertools
#import random
#from heapq import heapify, heappop, heappush
from collections import defaultdict
#from collections import deque
#import copy
#import math
#from functools import lru_cache
#@lru_cache(maxsize=None)
#MOD = pow(10,9) + 7
MOD = 998244353
#dx = [1,0,-1,0]
#dy = [0,1,0,-1]
#dx8 = [1,1,0,-1,-1,-1,0,1]
#dy8 = [0,1,1,1,0,-1,-1,-1]
def main():
n,S = map(int,input().split())
A = list(map(int,input().split()))
kouho = []
for a in A:
temp = [a]
while temp[-1]*a <= S:
temp.append(temp[-1]*a)
kouho.append(temp)
#print(kouho)
#dp[x]: x余っている時の場合の数
mid = n//2
dp = defaultdict(int)
dp[S] = 1
for i in range(mid):
p = defaultdict(int)
p,dp = dp,p
for x in p:
for v in kouho[i]:
if v > x: break
dp[x-v] += p[x]
pat = []
for x,v in dp.items():
#残りxとなるときがv通り
pat.append((x,v))
pat.sort()
nokori = []
cum = [0]
for x,v in pat:
nokori.append(x)
cum.append(cum[-1]+v)
#print(nokori)
#print(cum)
total = cum[-1]
dp = defaultdict(int)
#dp[x]: x使った時の場合の数
dp[0] = 1
for i in range(mid,n):
p = defaultdict(int)
p,dp = dp,p
for x in p:
for v in kouho[i]:
if x+v > S: break
dp[x+v] += p[x]
#print(dp)
ans = 0
for x,v in dp.items():
#x使った時v通り
#nokoriがx以下となるときの値を足せる。
idx = bisect.bisect_left(nokori,x)
ans += (total - cum[idx]) * v
print(ans)
if __name__ == '__main__':
main()
ygd.