BZOJ

题意即求$$\sum_{i=0}n\sum_{j=1}{a+id}\sum_{x=1}jxk$$

我们知道最后一个\(\sum\)是自然数幂和,设\(f(n)=\sum_{x=1}^nx^k\),这是一个\(k+1\)次多项式,可以插值求出(当然本题只需要求出任意\(k+3\)个值即可不需要插值)。

令\(g(n)=\sum_{i=1}^nf(i)\),(打表)差分可知这是一个\(k+2\)次多项式。

同样令\(h(n)=\sum_{i=0}^ng(a+id)\),同样差分可知这是一个\(k+3\)次多项式。

所以用拉格朗日插值我们代入\(k+4\)个值就可以求出\(h(n)\)了。

也就是先求\(k+3\)个\(f(x)\)的值,再求出\(k+3\)个\(g(x)\)的值,然后对\(g\)插值求\(k+4\)个\(g(a+xd)\),前缀和一下就有了\(h\)的\(k+4\)个值,然后再插一次就得到\(h(n)\)了。(嵌套好鬼畜...)


注意\(f,g,h\)都是个前缀和...

注意这题两倍的模数会爆int。可以用unsigned int


从这题可以看出:

  1. 多一个\(\sum\)一般会使多项式次数+1。
  2. 插值可以嵌套,且复杂度不变,仍是\(O(k^2)\)。

这是伯努利数的做法:https://blog.csdn.net/qq_20669971/article/details/65938763。


//824kb	28ms
#include <cstdio>
#include <algorithm>
#define mod 1234567891
#define Mod(x) x>=mod&&(x-=mod)
#define Add(x,v) (x+=v)>=mod&&(x-=mod)
typedef long long LL;
typedef unsigned int uint;
const int N=130; uint g[N],h[N],ifac[N]; inline uint FP(uint x,uint k)
{
uint t=1;
for(; k; k>>=1,x=1ll*x*x%mod)
if(k&1) t=1ll*t*x%mod;
return t;
}
uint Lagrange(uint *y,const int m,uint x)
{
static uint pre[N],suf[N];
pre[0]=x, suf[m+1]=1;
for(int i=1; i<m; ++i) pre[i]=1ll*pre[i-1]*(x+mod-i)%mod;
for(int i=m; i; --i) suf[i]=1ll*suf[i+1]*(x+mod-i)%mod;
LL ans=0;
for(int i=0,up,down; i<=m; ++i)
{
if(i) up=1ll*pre[i-1]*suf[i+1]%mod*y[i]%mod;
else up=1ll*suf[i+1]*y[i]%mod;
down=(m-i)&1?mod-1ll*ifac[i]*ifac[m-i]%mod:1ll*ifac[i]*ifac[m-i]%mod;
ans+=1ll*up*down%mod;
}
return ans%mod;
} int main()
{
ifac[N-1]=1119688141;//是129!的逆元不是129的!!!今天错了两次这个真是醉了=-=
for(int i=N-1; i; --i) ifac[i-1]=1ll*ifac[i]*i%mod; int T,K; uint a,n,d; g[0]=0;
for(scanf("%d",&T); T--; )
{
scanf("%d%u%u%u",&K,&a,&n,&d);
for(int i=1; i<=K+2; ++i) g[i]=g[i-1]+FP(i,K), Mod(g[i]); //f = \sum i^k
for(int i=1; i<=K+2; ++i) Add(g[i],g[i-1]); //g = \sum f(i)
h[0]=Lagrange(g,K+2,a);
for(int i=1; i<=K+3; ++i) Add(a,d), h[i]=h[i-1]+Lagrange(g,K+2,a), Mod(h[i]);
printf("%d\n",(int)Lagrange(h,K+3,n));
}
return 0;
}

BZOJ.3453.tyvj 1858 XLkxc(拉格朗日插值)的更多相关文章

  1. 【BZOJ】3453: tyvj 1858 XLkxc 拉格朗日插值(自然数幂和)

    [题意]给定k<=123,a,n,d<=10^9,求: $$f(n)=\sum_{i=0}^{n}\sum_{j=1}^{a+id}\sum_{x=1}^{j}x^k$$ [算法]拉格朗日 ...

  2. BZOJ 3453 - tyvj 1858 XLkxc(插值+推式子)

    题面传送门 首先根据我们刚学插值时学的理论知识,\(f(i)\) 是关于 \(i\) 的 \(k+1\) 次多项式.而 \(g(x)\) 是 \(f(x)\) 的前缀和,根据有限微积分那一套理论,\( ...

  3. BZOJ3453: tyvj 1858 XLkxc(拉格朗日插值)

    题意 题目链接 Sol 把式子拆开,就是求这个东西 \[\sum_{i = 0} ^n \sum_{j = 1}^{a + id} \sum_{x =1}^j x^k \pmod P\] 那么设\(f ...

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

    传送门 \(f(n)=\sum_{i=1}^ni^k\),这是自然数幂次和,是一个以\(n\)为自变量的\(k+1\)次多项式 \(g(n)=\sum_{i=1}^nf(i)\),因为这东西差分之后是 ...

  5. [BZOJ3453]tyvj 1858 XLkxc:拉格朗日插值

    分析 之前一直不知道拉格朗日插值是干什么用的,只会做模板题,做了这道题才明白这个神奇算法的用法. 由题意可知,\(f(x)\)是关于\(x\)的\(k+1\)次函数,\(g(x)\)是关于\(x\)的 ...

  6. 【BZOJ】2655: calc 动态规划+拉格朗日插值

    [题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...

  7. bzoj 4559 [JLoi2016]成绩比较——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 关于拉格朗日插值,可以看这些博客: https://www.cnblogs.com/E ...

  8. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

  9. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

随机推荐

  1. WPA2-PSK无线密码破解

    无线网络WIFI(wireless Fidelity )正确发音 /wai fai/ 是一个建立在IEEE 802.11标准的无线局域网,目前主流的无线上网模式主要有两种分别是 GRPS(手机无线上网 ...

  2. 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

    top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...

  3. Python交换a,b两个数值的三种方式

    # coding:utf-8 a = 1 b = 2 # 第一种方式 # t = a # 临时存放变量值 # a = b # b = t # 第二种方式 # a = a + b # a的值已经不是原始 ...

  4. MySQL5.7.20安装过程报错CMake Error at cmake/boost.cmake:81 (MESSAGE):

    MySQL在5.7版本及以后,都需要boots 库,所以需要先安装boots 步骤: 1.在/usr/local下创建 名为boots的目录 mkdir -p /usr/local/boots 2.进 ...

  5. Python内置模块之序列化模块

    序列化模块 json dumps loads dump load pickle dumps loads dump load shelve json 1: dumps/loads import json ...

  6. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  7. Spring Boot学习--项目启动时执行指定service的指定方法

    Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner. 这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方 ...

  8. WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn) java.net.ConnectException: Connection refused

    1.启动kafka的脚本程序报如下所示的错误: [hadoop@slaver1 script_hadoop]$ kafka-start.sh start kafkaServer... [-- ::,] ...

  9. CDOJ 1965 连通域统计【DFS】

    求连通域个数,简单题 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; typedef l ...

  10. IDEA上创建 Maven SpringBoot项目发布到Tomcat

    概述 上篇记录了IDEA上创建Maven SpringBoot+mybatisplus+thymeleaf 项目,但是如何将SpringBoot发布到Tomcat,直接采用Maven 命令Clear- ...