• bzoj3453: tyvj 1858 XLkxc(拉格朗日插值)


    传送门

    (f(n)=sum_{i=1}^ni^k),这是自然数幂次和,是一个以(n)为自变量的(k+1)次多项式

    (g(n)=sum_{i=1}^nf(i)),因为这东西差分之后是(f),所以这是一个(k+2)次多项式

    同理最后我们要求的也是一个(k+3)次多项式

    (f,g)暴力计算,然后把第三个多项式用拉格朗日插值插出来,最后只要求第三个多项式的点值即可

    话说这题模数没问题啊……为啥得开longlong啊……

    //minamoto
    #include<bits/stdc++.h>
    #define R register
    #define int long long
    #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
    #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
    #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
    using namespace std;
    const int N=155,P=1234567891;
    inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
    inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
    inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
    int ksm(R int x,R int y){
        R int res=1;
        for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
        return res;
    }
    int f[N],g[N],n,k,a,d,x[N];
    int Large(int *f,int n,int k){
    	if(k<=n)return f[k];
    	int ty=(n&1)?P-1:1,res=0,tmp=1;
    	fp(i,1,n)tmp=1ll*tmp*(k-i)%P*ksm(i,P-2)%P;
    	fp(i,0,n){
    		res=add(res,1ll*tmp*ty%P*f[i]%P);
    		tmp=1ll*tmp*(k-i)%P*ksm(k-i-1,P-2)%P*(n-i)%P*ksm(i+1,P-2)%P;
    		ty=P-ty;
    	}return res;
    }
    signed main(){
    //	freopen("testdata.in","r",stdin);
    	int T;scanf("%lld",&T);
    	while(T--){
    		scanf("%lld%lld%lld%lld",&k,&a,&n,&d);
    //		memset(f,0,sizeof(f)),memset(g,0,sizeof(g));
    		fp(i,1,k+4)f[i]=add(f[i-1],ksm(i,k));
    		fp(i,1,k+4)f[i]=add(f[i],f[i-1]);
    		fp(i,0,k+4)g[i]=add(i?g[i-1]:0,Large(f,k+4,add(a,mul(i,d))));
    		printf("%lld
    ",Large(g,k+4,n));
    	}return 0;
    }
    
  • 相关阅读:
    struts2 上传文件
    Struts2文件下载
    关于maven:调整你的maven的jdk版本为 xxxx
    倒计时显示
    [JSP] c:forEach 如何输出序号
    BaseServlet 继承 httpServlet
    验证码
    Javascript中Base64编码解码的使用实例
    五、javaScript基础&DOM(二)
    四、javaScript基础&DOM(一)
  • 原文地址:https://www.cnblogs.com/bztMinamoto/p/10217100.html
Copyright © 2020-2023  润新知