結果
| 問題 | No.1011 Infinite Stairs |
| コンテスト | |
| ユーザー |
uni_python
|
| 提出日時 | 2020-07-13 20:05:47 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 2,000 ms |
| コード長 | 1,336 bytes |
| 記録 | |
| コンパイル時間 | 296 ms |
| コンパイル使用メモリ | 82,496 KB |
| 実行使用メモリ | 79,528 KB |
| 最終ジャッジ日時 | 2024-07-17 12:11:54 |
| 合計ジャッジ時間 | 2,394 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
import sys
input=sys.stdin.readline
def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))
def main():
mod=10**9+7
N,d,K=MI()
"""
形式的べき級数
(x+x^2+...+x^d)=x*(1-x^d)/(1-x)
[x^K-N] {(1-x^(d+1))/(1-x)}^N
=[x^K-N] Σ(nCi (-x^(d+1))^i)/Σ((N+j-1)C(j) x^j)
i(d+1)+j=K-Nになるようにjを選ぶ
かな
1/(1-x) = (1+x+x^2+...)なので,これのN乗からx^kの係数を持ってくることは,
jこのボールとN-1この仕切りに対応
"""
#0~Nまで逆元などを事前計算
def cmb(n, r, mod):
if (r < 0) or (n < r):
return 0
r = min(r, n - r)
return (fact[n] * factinv[r] * factinv[n-r])%mod
fact=[1,1]
factinv=[1,1]
inv=[0,1]
for i in range(2, N+K + 1):
fact.append((fact[-1] * i) % mod)
inv.append((-inv[mod % i] * (mod // i)) % mod)
factinv.append((factinv[-1] * inv[-1]) % mod)
ans=0
for i in range(N+1):
a=1
if i%2==1:
a=-1
temp=cmb(N,i,mod)*a
j=K-N-i*d
temp2=cmb(N+j-1,j,mod)
temp=(temp*temp2)%mod
ans=(ans+temp)%mod
print(ans)
main()
uni_python