#include<stdio.h>
#define mod 1000000007
typedef long long lld;
lld a, b, sum;
lld exp(lld a, lld b){
if(b==0)return 1;
lld k=exp(a, b/2);
k=(k*k)%mod;
if(b%2)k=(k*a)%mod;
return k;
}
int n, k;
lld p, q, pq, mpq, dy[111], re;
double pr, d2[111];
int main(){
int n, i;
scanf("%lld%lld%d%d", &p, &q, &n, &k);
if(k==0 || p==q){puts("0"); return 0;}
if(k==n || q==0){puts("1"); return 0;}
pr = (double)q/p;
pq = q*exp(p,mod-2)%mod, mpq = (mod-pq)%mod;
dy[1]=1;
for(i=1; i<n; i++)dy[i+1] = (dy[i] + mpq*dy[i-1]%mod)*exp(1+mpq, mod-2)%mod;
d2[1]=1;
for(i=1; i<n; i++)d2[i+1] = (d2[i] - pr*d2[i-1])/(1-pr);
// for(i=0; i<=n; i++)printf("%lf ", d2[i]/d2[n]);
// puts("");
printf("%lld", dy[k]*exp(dy[n],mod-2)%mod);
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1084 KB |
Output is correct |
2 |
Correct |
0 ms |
1084 KB |
Output is correct |
3 |
Correct |
0 ms |
1084 KB |
Output is correct |
4 |
Incorrect |
0 ms |
1084 KB |
Output isn't correct |
5 |
Halted |
0 ms |
0 KB |
- |