【题意】给定k<=123,a,n,d<=10^9,求:

$$f(n)=\sum_{i=0}^{n}\sum_{j=1}^{a+id}\sum_{x=1}^{j}x^k$$

【算法】拉格朗日插值

【题解】参考:拉格朗日插值法及应用 by DZYO

虽然式子很复杂,但一点一点化简有条理的化简后就可以做了。

首先最后是一个自然数幂和:

$$\sum_{x=1}^{j}x^k$$

这是一个k+1次多项式,可以理解为k+一个Σ(一般一个Σ增加一次项)。

然后会发现最后部分和第二部分之间不需要插值,因为第二部分的前若干小项的计算只需要第一部分的前若干小项,那么:

$$g(m)=\sum_{j=1}^{m}\sum_{x=1}^{j}x^k$$

这是一个k+2次多项式,对g(m)可以O(k)计算前k+2项,因为后面的自然数幂和与j无关,所以可以处理成前缀和(不过对最终复杂度没有意义)。

剩余的部分:

$$f(n)=\sum_{i=0}^{n}g(a+id)$$

这是一个k+3次多项式,强制插值。对于前k+3项,每一项需要O(k)的插值运算,复杂度O(k^2)。

从这道题可以看出相邻插值嵌套的计算是O(k^2),而且适用于多层嵌套复杂度不变。

这道题有一点比较坑,模数*2会爆int,要使用unsigned int。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define int unsigned int
using namespace std;
const int maxn=,MOD=;
int f[maxn],g[maxn],a,b,k,n,mx,fac[maxn],fav[maxn];
int M(int x){return x>=MOD?x-MOD:x;}
int power(int x,int k){int ans=;while(k){if(k&)ans=1ll*ans*x%MOD;x=1ll*x*x%MOD;k>>=;}return ans;}
int calc(int *g,int u){
if(u<=mx)return g[u];//?
int v=;
for(int i=;i<=mx;i++)v=1ll*v*(u-i+MOD)%MOD;
int ans=;
for(int i=;i<=mx;i++){
int t=1ll*fav[i-]*fav[mx-i]%MOD;
if((mx-i)&)t=M(MOD-t);
ans=M(ans+1ll*g[i]*v%MOD*power(M(u-i+MOD),MOD-)%MOD*t%MOD);
}
return ans;
}
#undef int
int main(){
#define int unsigned int
int T;scanf("%d",&T);
fac[]=;for(int i=;i<=;i++)fac[i]=1ll*fac[i-]*i%MOD;
fav[]=power(fac[],MOD-);for(int i=;i>=;i--)fav[i-]=1ll*fav[i]*i%MOD;
while(T--){
scanf("%d%d%d%d",&k,&a,&n,&b);mx=k+;
g[]=;
for(int i=;i<=mx;i++){
g[i]=g[i-];
for(int j=;j<=i;j++){
g[i]=M(g[i]+power(j,k));
}
}
f[]=calc(g,a);//!!!
for(int i=;i<=mx;i++){
f[i]=M(f[i-]+calc(g,M(a+1ll*i*b%MOD)));
}
printf("%d\n",calc(f,n));
}
return ;
}

【BZOJ】3453: tyvj 1858 XLkxc 拉格朗日插值(自然数幂和)的更多相关文章

  1. BZOJ.3453.tyvj 1858 XLkxc(拉格朗日插值)

    BZOJ 题意即求\[\sum_{i=0}^n\sum_{j=1}^{a+id}\sum_{x=1}^jx^k\] 我们知道最后一个\(\sum\)是自然数幂和,设\(f(n)=\sum_{x=1}^ ...

  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.5339.[TJOI2018]教科书般的亵渎(拉格朗日插值) & 拉格朗日插值学习笔记

    BZOJ 洛谷 题意的一点说明: \(k\)次方这个\(k\)是固定的,也就是最初需要多少张亵渎,每次不会改变: 因某个怪物死亡引发的亵渎不会计分. 不难发现当前所需的张数是空格数+1,即\(m+1\ ...

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

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

随机推荐

  1. Git命令提交项目代码

    Git客户端安装 今天就结合`GitHub`,通过`Git`命令,来了解如何实现开源代码库以及版本控制 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托 ...

  2. xshell 常用快捷键

    1.连接mysql数据库mysql -uroot -p -h127.0.0.1 -P3306 2.列出所有sessionshow full processlist; 3.查看20条执行时间最长的SQL ...

  3. 【设计模式】—— 原型模式Prototype

    前言:[模式总览]——————————by xingoo 模式意图 由于有些时候,需要在运行时指定对象时哪个类的实例,此时用工厂模式就有些力不从心了.通过原型模式就可以通过拷贝函数clone一个原有的 ...

  4. SPOJ NETADMIN_Smart Network Administrator

    给一个图,某些点需要单独以某一种颜色的线连接到1点,问如何安排能够使得整个图颜色最多的一条路颜色最少. 显然,二分枚举然后加以颜色其实就是流量了,相当于对每条边限定一个当前二分的流量值,判断能否满流即 ...

  5. HDU1565_方格取数(1)

    给一个数字方阵,你要从中间取出一些数字,保证相邻的两个数字不同时被取出来,求取出来的最大的和是多少? 建立图模型,对于行列的和为奇数的格子,建立一条从原点到达这个点的边,对于行列和为偶数的格子,建立一 ...

  6. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...

  7. 【NOI 2018】冒泡排序(组合数学)

    题意大概是给定一个长度为$n$的排列$p$,求有多少长度为$n$的排列满足冒泡排序的交换次数为$\frac{1}{2} \sum\limits_{i = 1}^{n}|i - p_{i}|$. 可以发 ...

  8. 【bzoj1026】 SCOI2009—windy数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 (题目链接) 题意 在区间${[A,B]}$有多少个数相邻两个数位上的数之差至少为2. Sol ...

  9. Centos6.7在VMware7.0上的hgfs文件共享

    站在各大巨人的肩膀上.总结如下: 1,设置虚拟机共享 虚拟机->setting->options->Shared Folders->Always Enable mount -t ...

  10. R语言 神经网络算法

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...