結果
問題 | No.1043 直列大学 |
ユーザー | convexineq |
提出日時 | 2020-05-01 21:50:45 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,714 ms / 2,000 ms |
コード長 | 928 bytes |
コンパイル時間 | 126 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 21,760 KB |
最終ジャッジ日時 | 2024-12-25 03:28:59 |
合計ジャッジ時間 | 16,480 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
# coding: utf-8 # Your code here! import sys readline = sys.stdin.readline read = sys.stdin.read #n,m,s = [int(i) for i in readline().split()] n,m = [int(i) for i in readline().split()] v = [int(i) for i in readline().split()] r = [int(i) for i in readline().split()] a,b = [int(i) for i in readline().split()] MOD = 1000000007 def f(dp,v): res = 0 for i in v: res = min(res+i,M) for j in range(res,i-1,-1): dp[j] += dp[j-i] dp[j] %= MOD M = 100000 dp = [0]*(M+1) dp[0] = 1 f(dp,v) dpr = [0]*M dpr[0] = 1 f(dpr,r) from itertools import accumulate acc = list(accumulate(dp)) #print(dp[:20],dpr[:20],acc[:20]) ans = -1 for i,v in enumerate(dpr): L = a*i R = min(M,b*i) #if i < 20: print(i,v,L,R) if L <= R: if i==0: ans += v*(acc[R]) else: ans += v*(acc[R]-acc[L-1]) print(ans%MOD)