CF932E Team Work

    科技2022-08-22  104

    luogu { } \{\} {}为第二类 s t r i n g string string ∑ i = 1 n C ( n , i ) ∗ i k \sum_{i=1}^{n}C(n,i)*i^k i=1nC(n,i)ik ∑ i = 1 n C ( n , i ) ∑ j = 0 k j ! ∗ { k , j } ∗ C ( i , j ) \sum_{i=1}^{n}C(n,i)\sum_{j=0}^{k}j!*\{k,j\}*C(i,j) i=1nC(n,i)j=0kj!{k,j}C(i,j) ∑ i = 1 n ∑ j = 0 k C ( n , i ) ∗ C ( i , j ) ∗ j ! ∗ { k , j } \sum_{i=1}^{n}\sum_{j=0}^{k}C(n,i)*C(i,j)*j!*\{k,j\} i=1nj=0kC(n,i)C(i,j)j!{k,j} ∑ j = 0 k j ! ∗ { k , j } ∑ i = 1 n C ( n , i ) ∗ C ( i , j ) \sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,i)*C(i,j) j=0kj!{k,j}i=1nC(n,i)C(i,j) ∑ j = 0 k j ! ∗ { k , j } ∑ i = 1 n C ( n , j ) ∗ C ( n − j , i − j ) \sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,j)*C(n-j,i-j) j=0kj!{k,j}i=1nC(n,j)C(nj,ij) ∑ j = 0 k j ! ∗ { k , j } ∑ i = 1 n C ( n , j ) ∗ C ( n − j , i − j ) \sum_{j=0}^{k}j!*\{k,j\}\sum_{i=1}^{n}C(n,j)*C(n-j,i-j) j=0kj!{k,j}i=1nC(n,j)C(nj,ij) ∑ j = 0 k j ! ∗ { k , j } ∗ C ( n , j ) ∑ i = 1 n C ( n − j , i − j ) \sum_{j=0}^{k}j!*\{k,j\}*C(n,j)\sum_{i=1}^{n}C(n-j,i-j) j=0kj!{k,j}C(n,j)i=1nC(nj,ij) ∑ j = 0 k j ! ∗ { k , j } ∗ C ( n , j ) ∗ 2 n − j \sum_{j=0}^{k}j!*\{k,j\}*C(n,j)*2^{n-j} j=0kj!{k,j}C(n,j)2nj

    #include <bits/stdc++.h> using namespace std; const int mo = 1e9+7; typedef long long LL; #define int LL const int maxk = 5e3+5; int readint(){ int x=0,f=1;char s=getchar(); #define sc (s=getchar()) while(s<'0'||s>'9'){ if(s=='-') f=-1; sc; } while(s>='0'&&s<='9'){ x=(x<<3)+(x<<1)+(s^48); sc; } #undef sc return x*f; } int C[maxk]; int fac[maxk]; int s[maxk][maxk]; int qkpow(int a,int b){ int ans=1; while(b){ if(b&1) ans=ans*a%mo; b>>=1; a=a*a%mo; } return ans; } void init(int n,int k){ C[1]=n;C[0]=1; for(int i=2;i<=k;i++) C[i]=C[i-1]*(n-i+1)%mo*qkpow(i,mo-2)%mo; s[0][0]=1; for(int i=1;i<=k;i++){ for(int j=1;j<=i;j++){ s[i][j]=(s[i-1][j]*j%mo+s[i-1][j-1])%mo; } } fac[1]=1; for(int i=2;i<=k;i++){ fac[i]=fac[i-1]*i%mo; } } signed main (){ int n=readint(),k=readint(); init(n,k); int pow_2=qkpow(2,n); int be=2; int ans=0; for(int j=1;j<=k;j++){ if(j>n) break; ans=(ans+fac[j]*s[k][j]%mo*C[j]%mo*pow_2%mo*qkpow(be,mo-2))%mo; be=be*2%mo; } cout<<ans<<endl; return 0; }
    Processed: 0.030, SQL: 10