結果
| 問題 | 
                            No.1011 Infinite Stairs
                             | 
                    
| コンテスト | |
| ユーザー | 
                             uni_python
                         | 
                    
| 提出日時 | 2020-07-13 20:05:47 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                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