【ybt金牌导航8-3-5】多重前缀和(拉格朗日插值)

多重前缀和

题目链接:ybt金牌导航8-3-5

题目大意

求这个式子的值。
sum i=0~n sum j=1~a+id sum l=1~j l^k
其中 n,a,d,k 都给出。

思路

重新写式子:
i=0nj=1a+idl=1jlk

其实看到 lkk 的小范围我们不难你想到用拉格朗日插值来搞这个 k 项的多项式。
然后你发现它前面还有两个前缀和。

那其实 l=1jlk 这个是 k+1 项的,或者你通过证明 lkk 项的多项式也可以看出,每次前缀和,它的项数就 +1,那这道题的就是 k+3 项。

那你就一层一层的求下去即可。
表示出 lk,然后拉格朗日插值可以求出 l=1jlk 的,然后表示出之后又可以拉格朗日插值求 j=1a+idl=1jlk 的,然后再表示出来再求就可以得到 i=0nj=1a+idl=1jlk 了。

代码

#include<cstdio> #define ll long long #define mo 1234567891 using namespace std; int T; ll k, a, n, d, y[131], f[131], g[131]; ll pre[131], suf[131], jc[131]; ll ksm(ll x, ll y) { ll re = 1; while (y) { if (y & 1) re = re * x % mo; x = x * x % mo; y >>= 1; } return re; } ll query(ll *f, ll k, ll n) {//拉格朗日插值 ll re = 0; pre[0] = 1; for (int i = 1; i <= k; i++) pre[i] = pre[i - 1] * ((n - i + mo) % mo) % mo;//这里 n-i 要单独取模了再运算,因为你的 n 在求 y 数组的时候是 long long 级别的 suf[k + 1] = 1; for (int i = k; i >= 1; i--) suf[i] = suf[i + 1] * ((n - i + mo) % mo) % mo; for (int i = 1; i <= k; i++) { re = (re + f[i] * pre[i - 1] % mo * suf[i + 1] % mo * ksm(jc[i - 1] * jc[k - i] % mo * (((k - i) & 1) ? mo - 1 : 1) % mo, mo - 2) % mo) % mo; } return re; } int main() { jc[0] = 1; for (int i = 1; i <= 130; i++) jc[i] = jc[i - 1] * i % mo; scanf("%d", &T); while (T--) { scanf("%lld %lld %lld %lld", &k, &a, &n, &d); for (int i = 1; i <= k + 2; i++) f[i] = (f[i - 1] + ksm(i, k)) % mo; for (int i = 1; i <= k + 3; i++) g[i] = (g[i - 1] + query(f, k + 2, i)) % mo; y[0] = query(g, k + 3, a);//记得这个前缀是从 0 开始 for (int i = 1; i <= k + 4; i++) y[i] = (y[i - 1] + query(g, k + 3, a + d * i)) % mo; printf("%lld\n", query(y, k + 4, n)); } return 0; }

__EOF__

本文作者あおいSakura
本文链接https://www.cnblogs.com/Sakura-TJH/p/YBT_JPDH_8-3-5.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   あおいSakura  阅读(63)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示