解题:CF622F The Sum of the k-th Powers

题面

TJOI2018出CF原题弱化版是不是有点太过分了?对,就是 TJOI2018 教科书般的亵渎

然而我这个问题只会那个题的范围的m^3做法

回忆一下1到n求和是二次的,平方求和公式是三次的,立方求和公式是四次的,那m次方求和公式一定是个m+1次多项式

直接扔m+2个值进去把它插出来,因为是连续的可以做到线性(不算逆元)

 1 #include<cstdio>
 2 const int N=1e6+60,mod=1e9+7;
 3 int n,k,ans,sum,fac[N],pre[N],suf[N];
 4 int Qpow(int x,int k)
 5 {
 6     if(k<=1) return k?x:1;
 7     int tmp=Qpow(x,k>>1);
 8     return 1ll*tmp*tmp%mod*((k&1)?x:1)%mod;
 9 }
10 int main()
11 {
12     scanf("%d%d",&n,&k);
13     fac[0]=pre[0]=suf[k+3]=1;
14     for(int i=1;i<=k+2;i++) fac[i]=1ll*fac[i-1]*i%mod;
15     for(int i=1;i<=k+2;i++) pre[i]=1ll*pre[i-1]*(n-i+mod)%mod;
16     for(int i=k+2;i;i--) suf[i]=1ll*suf[i+1]*(n-i+mod)%mod;
17     for(int i=1;i<=k+2;i++)
18     {
19         sum=(sum+Qpow(i,k))%mod;
20         int fz=1ll*pre[i-1]*suf[i+1]%mod;
21         int fm=1ll*fac[i-1]*fac[k+2-i]%mod;
22         (ans+=1ll*sum*fz%mod*Qpow(((k-i)&1)?mod-fm:fm,mod-2)%mod)%=mod;
23     }
24     printf("%d",ans);
25     return 0;
26 }
View Code

猜你喜欢

转载自www.cnblogs.com/ydnhaha/p/10617095.html