結果
問題 | No.155 生放送とBGM |
ユーザー |
|
提出日時 | 2021-07-04 10:02:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 952 ms / 6,000 ms |
コード長 | 1,689 bytes |
コンパイル時間 | 324 ms |
コンパイル使用メモリ | 82,224 KB |
実行使用メモリ | 260,712 KB |
最終ジャッジ日時 | 2024-06-30 23:46:06 |
合計ジャッジ時間 | 6,857 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
import sysinput = 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 add(dp,v):"""dp[i] : 和がiの通り数vを好きなだけ使えるときの通り数に更新"""dp = dpfor i in range(v,m+1):dp[i] += dp[i-v]if dp[i]>M:dp[i] -= Mreturn dpdef sub(dp,v):"""vを追加する前の通り数に戻す"""for i in range(v,m+1)[::-1]:dp[i] -= dp[i-v]dp[i] %= Mreturn dpn,l = list(map(int, input().split()))def f(v):m,s = map(int, v.split(":"))return 60*m + ss = list(map(f, input().split()))l *= 60l -= 1g = [1.0]for i in range(1,51):g.append(g[-1]*i)# if sum(s)<l:if 0:ans = nelse:dp = [[0]*(l+1) for _ in range(n+1)] # i個使って和がjdp[0][0] = 1for i in range(n):v = s[i]for j in range(i+1)[::-1]:for k in range(l)[::-1]:val = dp[j][k]if val==0 or k+v>l:continuedp[j+1][k+v] += valdp0 = [item[:] for item in dp]ans = 0for i in range(n):v = s[i]dp = [item[:] for item in dp0]for j in range(n):for k in range(l):val = dp[j][k]if val==0 or k+v>l:continuedp[j+1][k+v] -= valres = 0for j in range(n):res += sum(dp[j]) * (g[j] * g[n-1-j] / g[n])ans += resprint(ans)# from pprint import pprint# print(dp)