2019牛客暑期多校训练营(第一场)-B.Integration()

链接:https://ac.nowcoder.com/acm/contest/881/B

题意:给出n,和数组a[n],求特定表达式取模后的值。

思路:用到列项相消:

   那么,,然后就变成了求和问题,利用费马小定理求逆元可计算得到结果。

AC代码:

#include<cstdio>
using namespace std;

const int MOD=1e9+7;
typedef long long LL;

int n;
LL a[1005],c[1005];
LL ans;

LL qpow(LL a,LL b){
    LL res=1;
    while(b){
        if(b&1) res=res*a%MOD;
        a=a*a%MOD;
        b>>=1;
    }
    return res;
}

int main(){
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;++i)
            scanf("%lld",&a[i]),c[i]=1;
        ans=0;
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                if(j!=i) c[i]=c[i]*((a[j]*a[j]%MOD-a[i]*a[i]%MOD+MOD)%MOD)%MOD;
        for(int i=1;i<=n;++i)
            ans=(ans+qpow(2*a[i]%MOD*c[i]%MOD,MOD-2))%MOD;
        printf("%lld\n",ans);
    }
    return 0;
}

 

posted @ 2019-07-19 14:37  Frank__Chen  阅读(256)  评论(0)    收藏  举报