zoukankan      html  css  js  c++  java
  • codeforce 891 E

    题链

    资瓷,日常不打数学公式,扔个链接:传送门

    扔个trick,生成函数的X可以是多项式,而且可以连续域的卷积。(平时的fft是离散的。)

    狄雷克卷积可不可以我不知道,有大佬知道请告诉我一下。

    #include<bits/stdc++.h>
    #define N 5005
    #define sight(x) ('0'<=x&&x<='9')
    #define mo 1000000007
    using namespace std;
    #define LL long long
    int n,K,m,ans,a[N],f[N][N];
    inline void read(int &x){
        static char c;
        for (c=getchar();!sight(c);c=getchar());
        for (x=0;sight(c);c=getchar())x=x*10+c-48;
    }
    void write(int x){if (x<10) {putchar('0'+x); return;} write(x/10); putchar('0'+x%10);}
    inline void writeln(int x){ if (x<0) putchar('-'),x*=-1; write(x); putchar('
    '); }
    inline void writel(int x){ if (x<0) putchar('-'),x*=-1; write(x); putchar(' '); }
    LL qsm(LL x,int y){
        static LL anw;
        for (anw=1;y;y>>=1,x=x*x%mo) if (y&1) anw=anw*x%mo; return anw;
    }
    int main(){
        read(n); read(K);
        for (int i=1;i<=n;i++) read(a[i]);
        f[0][0]=1;
        for (int i=1;i<=n;i++){
            f[i][0]=(LL)f[i-1][0]*a[i]%mo;
            for (int j=1;j<=i;j++) f[i][j]=((LL)f[i-1][j]*a[i]-f[i-1][j-1])%mo;
        }
        for (int i=0;i<=min(n,K);i++){
            int calc=1;
            for (int j=K-i+1;j<=K;j++) calc=(LL)calc*j%mo;
            ans=(ans+(LL)f[n][i]*qsm(n,K-i)%mo*calc)%mo;
        }
        ans=(LL)ans*qsm(qsm(n,K),mo-2)%mo;
        m=1;
        for (int i=1;i<=n;i++) m=(LL)m*a[i]%mo; ans=(m-ans)%mo;
        if (ans<0) ans+=mo;
        writeln(ans);
        return 0;
    }
  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/rrsb/p/8343218.html
Copyright © 2011-2022 走看看