51nod1229-序列求和V2【数学,拉格朗日插值】

正题

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1229


题目大意

给出n,k,rn,k,rn,k,r
∑i=1nikri\sum_{i=1}^ni^kr^ii=1nikri

1≤T≤20,1≤n,r≤1018,1≤k≤20001\leq T\leq 20,1\leq n,r\leq 10^{18},1\leq k\leq 20001T20,1n,r1018,1k2000


解题思路

如此明显的式子直接开推
Sk=∑i=1nikri,rSk=∑i=2n+1(i−1)kriS_k=\sum_{i=1}^ni^kr^i,rS_k=\sum_{i=2}^{n+1}(i-1)^kr^iSk=i=1nikri,rSk=i=2n+1(i1)kri
(r−1)Sk=nkrn+1−r+∑i=2n((i−1)k−ik)ri(r-1)S_k=n^kr^{n+1}-r+\sum_{i=2}^n\left((i-1)^k-i^k\right)r^i(r1)Sk=nkrn+1r+i=2n((i1)kik)ri
二项式展开(i−1)k(i-1)^k(i1)k
(r−1)Sk=nkrn+1−r+∑i=2n∑j=0k−1(−1)k−j(kj)ri(r-1)S_k=n^kr^{n+1}-r+\sum_{i=2}^n\sum_{j=0}^{k-1}(-1)^{k-j}\binom{k}{j}r^i(r1)Sk=nkrn+1r+i=2nj=0k1(1)kj(jk)ri
然后把jjj提到前面去
(r−1)Sk=nkrn+1−r+∑j=0k−1(−1)i−j(kj)∑i=2nri(r-1)S_k=n^kr^{n+1}-r+\sum_{j=0}^{k-1}(-1)^{i-j}\binom{k}{j}\sum_{i=2}^nr^i(r1)Sk=nkrn+1r+j=0k1(1)ij(jk)i=2nri
⇒Sk=nkrn+1−r+∑j=0k−1(−1)k−j(kj)(Sj−r)r−1\Rightarrow S_k=\frac{n^kr^{n+1}-r+\sum_{j=0}^{k-1}(-1)^{k-j}\binom{k}{j}(S_j-r)}{r-1}Sk=r1nkrn+1r+j=0k1(1)kj(jk)(Sjr)

这样SkS_kSk就可以O(k2)O(k^2)O(k2)递推了。

当然当r=1r=1r=1的时候,不能再使用这个公式,此时∑i=1nik\sum_{i=1}^ni^ki=1nik是很经典的问题,直接拉格朗日插值插出一个k+1k+1k+1次多项式即可。

此题到这里就圆满结束了,但是以直觉判断上面那个式子可以卷积,拆开组合数然后疯狂跳步一下就是
(r−1)Sk−rk!=nkrn+1−r−(r−1)rk!+∑j=0k−1(−1)k−j(k−j)!Sj−rj!(r-1)\frac{S_k-r}{k!}=n^kr_{n+1}-r-(r-1)\frac{r}{k!}+\sum_{j=0}^{k-1}\frac{(-1)^{k-j}}{(k-j)!}\frac{S_j-r}{j!}(r1)k!Skr=nkrn+1r(r1)k!r+j=0k1(kj)!(1)kjj!Sjr

H(x)=∑i=0∞(nirn+1−r−(r−1)ri!)xiH(x)=\sum_{i=0}^\infty (n^ir_{n+1}-r-(r-1)\frac{r}{i!})x^iH(x)=i=0(nirn+1r(r1)i!r)xi
G(x)=∑i=0∞Si−ri!,F(x)=∑i=1∞(−1)ii!G(x)=\sum_{i=0}^\infty \frac{S_i-r}{i!},F(x)=\sum_{i=1}^{\infty}\frac{(-1)^i}{i!}G(x)=i=0i!Sir,F(x)=i=1i!(1)i
那么有
(r−1)G(x)=H(x)+F(x)G(x)(r-1)G(x)=H(x)+F(x)G(x)(r1)G(x)=H(x)+F(x)G(x)
⇒G(x)=H(x)r−1−F(x)\Rightarrow G(x)=\frac{H(x)}{r-1-F(x)}G(x)=r1F(x)H(x)

然后多项式求逆即可,时间复杂度O(klog⁡k)O(k\log k)O(klogk),虽然这题的模数不能用,但是可以顺便解决掉序列求和V5。

但是最近写的多项式求逆有点多,咕了,所以上面的式子如果有错我也没办法(((、


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100,P=1e9+7;
ll T,n,k,r,inv[N],fac[N],pre[N],suf[N],s[N];
ll power(ll x,ll b){ll ans=1;b%=P-1;x%=P;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{scanf("%lld",&T);inv[0]=fac[0]=inv[1]=1;for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;while(T--){scanf("%lld%lld%lld",&n,&k,&r);r%=P;if(r==1){ll ans=0;k+=2;n%=P;pre[0]=suf[k+1]=1;for(ll i=1;i<=k;i++)pre[i]=pre[i-1]*(n-i)%P;for(ll i=k;i>=1;i--)suf[i]=suf[i+1]*(n-i)%P;for(ll i=1,p=0;i<=k;i++){p=(p+power(i,k-2))%P;(ans+=p*pre[i-1]%P*suf[i+1]%P*inv[i-1]%P*(((k-i)&1)?P-inv[k-i]:inv[k-i])%P)%=P;}printf("%lld\n",(ans+P)%P);}else{ll z=power(r,n+1),invr=power(r-1,P-2);s[0]=(z-r+P)*invr%P;n%=P;for(ll i=1,pw=n;i<=k;i++,pw=pw*n%P){s[i]=(z*pw-r+P)%P;s[i-1]=(s[i-1]-r+P)%P;for(ll j=0;j<i;j++)(s[i]+=(((i-j)&1)?(P-1):(1))*s[j]%P*C(i,j)%P)%=P;s[i]=s[i]*invr%P;}printf("%lld\n",(s[k]+P)%P);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【做题记录】图论杂题

P1268 树的重量 $\texttt{solution}$ 算法&#xff1a;(贪心)\(\) 找规律 当 \(n2\) 时&#xff0c;显然答案就是 \(dis(1,2)\) 。 当 \(n3\) 时&#xff0c;答案&#xff1a; \[\dfrac{dis(1,3)dis(2,3)-dis(1,2)}{2} \]当 \(n\) 是任意的&#xff0c;第 \(n\) 条路径可以处于…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路&#xff0c;每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…

8.15模拟:图论

文章目录前言收获考场复盘T1 recoverT2 teamT3 planT4 seqpath总结至暗时刻 前言 60分 303000 … 已经不是被KH爆碾的问题 &#xff08;KH屹立不倒%%%&#xff09; 昨天祈祷不要挂80了 结果今天挂了160&#xff08;还不算那个背包的70&#xff09; qwq 加油吧 奇怪的教训又增加…

Azure Service Fabric Mesh:一个构建任务关键型微服务的平台

本文要点Azure Service Fabric Mesh&#xff08;目前处于预览阶段&#xff09;是一个完全托管的服务&#xff0c;它使你可以使用“无服务器”方法构建、部署和管理由运行在容器中的多语言服务组成的应用程序。Azure Service Fabric Mesh 通过使用 Envoy Proxy 构建的软件定义网…

【做题记录】人类智慧

CF741C Arpa’s overnight party and Mehrdad’s silent entering 描述&#xff1a;有 \(2n\) 个人坐在一张圆桌&#xff0c;第 \(1\) 个位置与第 \(n\) 个位置相邻。现在给他们分配 \(1\) 或 \(2\) 两种食物。要求任意相邻的三个人食物不完全相同。求是否有可行的分配方案。 转…

CF1039D-You Are Given a Tree【根号分治,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039D 题目大意 给出nnn个点的一棵树&#xff0c;然后对于k∈[1,n]k\in[1,n]k∈[1,n]求每次使用一条长度为kkk的链覆盖树并且不能重复覆盖点时最大覆盖条数。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 先考虑暴力怎么…

P3265 [JLOI2015]装备购买

题目描述&#xff1a; 给N个整数向量&#xff0c;每个向量带权值&#xff0c;求权值和最小的线性基 题解&#xff1a; 按权值v从小->大排序&#xff0c;依次插入线性基。整数线性基的思想类似&#xff0c;只是此时“消去”不能直接xor完成&#xff0c;需要类似高斯消元一样…

模板:欧拉路

文章目录前言代码前言 就是欧拉路的板子 理解起来有亿点困难&#xff08;连大神学长都还没有完全理解…&#xff09; 不过背起来还是很好背的 请勿模仿 如果是无向图&#xff1a;开一个vis数组&#xff0c;走一条边时把它的反向边标记上即可 代码 #include<bits/stdc.h&g…

Surging1.0发布在即,.NET开发者们,你们还在等什么?

开源&#xff0c;是近三十年来互联网经久不衰的话题。它不仅仅是一种技术分享的形态&#xff0c;更是一种开放&#xff0c;包容&#xff0c;互利共赢的互联网精神。 不到30年前&#xff0c;大神林纳德托瓦兹&#xff0c;在赫尔辛基大学实验室里&#xff0c;开发出了第一个版本的…

[SDOI2016]排列计数 (错排数概念 + 递推公式【附带证明】)

辛勤二更题目题解错排数概念错排数递推公式及其证明代码实现这种题做的时候&#xff1a; 做完后&#xff1a;正常这就是生活&#xff0c;我们要学会习惯 题目 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a; 1 ~ n 这 n 个数在序列中各出现了一次 若第 i …

长链剖分

将较长的链剖出来。 先来一道模板题 注意&#xff01;&#xff01;&#xff01; 【指针版长链剖分】循环遍历儿子们的答案时&#xff0c; for(int j0;j<len[ver[i]];j)... 而不是(因为申请了长度为 \(len\) 的数组&#xff01;&#xff01;) for(int j0;j<len[ver[i]];j)…

失配树(border树)

4和6没有border关系 举例子&#xff1a; 当i 3时&#xff0c;j fa[i-1] fa[2] 0 s[j1] s[1] a s[3] 所以把i 3点的父亲设为j1 1 P5829 [模板]失配树

魔方俱乐部

爆肝感动三更题目思路90分代码&#xff08;MLE&#xff09;题解代码实现题目 fateice 来到了魔方俱乐部旅行。 魔方俱乐部有N个分部&#xff0c;每个分部均有且仅有一个虫洞&#xff0c;但是这虫洞只能通往一个分部。 每个分部有一个 orzFang 价值&#xff0c;第i个分部的 or…

模板:最大匹配

文章目录前言代码前言 匈牙利算法 可以解决的问题&#xff1a; &#xff08;原谅我的偷懒&#xff09; &#xff08;原谅我的水文&#xff09; 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N3e5100; const int mod1e97; int n,…

P4700-[CEOI2011]Traffic【tarjan,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4700 题目大意 ABA\times BAB的网格上有nnn个点&#xff0c;然后mmm条有向/无向边连接成平面图&#xff0c;求最左边每个点能到达的最右边点的数量。 1≤A,B≤109,1≤n≤3105,1≤m≤91051\leq A,B\leq 10^9,1\leq n\leq 3\ti…

Stack Overflow 监控系统内部架构初探

Stack Exchange 架构主管 Nick Craver 在最近的一篇文章中介绍了他们的监控系统。他在文章中讨论了监控策略背后的理念和动机&#xff0c;并介绍了他们的工具集——主要是 Bosun、Grafana 和 Opserver。Stack Overflow 及其姐妹站点 Stack Exchange 运行在.NET 和 MS SQL Serve…

三元环计数

无向图三元环计数 从度数小的点向度数大的点连边&#xff0c;若度数相同则将编号小的向编号大的连边。 可以证明复杂度是 \(O(m\sqrt{m})\) 。 有向图三元环计数 将所有边看成无相&#xff0c;按照有向图的方式找出所有三元环&#xff0c;再进行检查是否在原图上也构成三元环。…

P5829 【模板】失配树

P5829 【模板】失配树 题目&#xff1a; 题解&#xff1a; 参考题解 我们先想一个问题&#xff1a;如何求出一个字符串的所有border&#xff1f; 如果一个字符串既是 S的前缀又是 S 的后缀&#xff0c;那么我们把 SS 自己平移一下就可以前后重合&#xff0c;然后我们就可以继…

树哈希判断同构无根同构问题转有根同构问题

前言 判断无根的同构 利用重心作为根进行dfs处理 注意哈希的公式&#xff1a; f[fa]∑f[son]*primesiz[fa] 这个东西好像也是千变万化 复杂度&#xff1a;nmlogn 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define int long long const …

[JLOI2015]战争调度

文章目录题目题解代码实现题目 脸哥最近来到了一个神奇的王国&#xff0c;王国里的公民每个公民有两个下属或者没有下属&#xff0c;这种关系刚好组成一个 n 层的完全二叉树。 公民 i 的下属是 2 * i 和 2 * i 1。最下层的公民即叶子节点的公民是平民&#xff0c; 平民没有下…