[雅礼6-30]书 book

来源:互联网 发布:淘宝优惠券手机端链接 编辑:程序博客网 时间:2024/06/11 21:27

E[移第i本书]=1+sigma{P[j在i上方]}(i!=j)。

考虑P[i][j]=P[j][i]pi+P[i][j](1-pj);
P[i][j]+p[j][i]=1.

两式联立得P[i][j]=pi/(pi+pj)

最后再把每个E[i]乘上p[i]即可

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define ll long long const int mod=1e9+7;using namespace std;int n;ll p[1010];ll ksm(ll a,int b){    ll re=1;    a%=mod;    while(b>0)    {        if(b&1) re=re*a%mod;        a=a*a%mod;        b=b/2;    }    return re;}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        ll a,b;        scanf("%lld%lld",&a,&b);        p[i]=a*ksm(b,mod-2)%mod;    }       ll ans=0;    for(int i=1;i<=n;i++)    {        ll sum=0;        for(int j=1;j<=n;j++)            if(i!=j) sum=(sum+p[j]*ksm(p[i]+p[j],mod-2)%mod)%mod;        ans=(ans+(1+sum)*p[i]%mod)%mod;     }    printf("%lld",ans);    return 0;}/*2227494 333333105839 333333159073 9999991493 1428573422 3333334945 370372227 111111196276 999999190882 999999142721 99999934858 999999101914 999999*/
原创粉丝点击