• 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;
    }
  • 相关阅读:
    SQLite的SQL语法
    C/C++中各种类型int、long、double、char表示范围(最大最小值)
    君子性非异也,善假于物也
    简单工厂模式
    Linux下通配符总结
    Readprocessmemory使用方法
    C++ 清空消息队列
    一周自学动态站点设计
    iOS 8.0正式公布啦
    What is the difference between JRE,JVM and JDK?
  • 原文地址:https://www.cnblogs.com/rrsb/p/8343218.html
Copyright © 2020-2023  润新知