제출 #19637

#제출 시각아이디문제언어결과실행 시간메모리
19637javelinsmanΩ (kriii4_P3)C++14
100 / 100
0 ms1724 KiB
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long ll;
const ll MOD = 1e9+7;

ll C[111], X[111];

ll go(ll x,ll y){
    x%=MOD;
    if(y==0) return 1;
    if(y==1) return x;
    if(y%2) return go(x,y-1)*x%MOD;
    ll h = go(x,y/2);
    return h*h%MOD;
}

ll l_minus(ll x,ll y){
    return (x-y+MOD)%MOD;
}

ll l_mult(ll x,ll y){
    return x*y%MOD;
}

ll l_div(ll x,ll y){
    return l_mult(x,go(y,MOD-2));
}

ll ans[111];

int main(){
    int P,Q,n,K;
    cin>>P>>Q>>n>>K;
    ll p = l_div(Q,P), q = l_minus(1, p);

    C[1] = 0, X[1] = q;
    for(int i=2;i<n;i++){
        C[i] = l_mult(l_div(p,l_minus(1,l_mult(p,X[i-1]))),C[i-1]);
        X[i] = l_div(q,l_minus(1,l_mult(p,X[i-1])));
    }

    ans[n] = 1;
    for(int i=n-1;i>=1;i--){
        ans[i] = (C[i]+l_mult(X[i],ans[i+1]))%MOD;
    }

    cout<<ans[K];
}
#Verdict Execution timeMemoryGrader output
Fetching results...