[51nod]1229 序列求和 V2(数学+拉格朗日差值)
题面
题解
这种颓柿子的题我可能死活做不出来……
首先\(r=0\)……算了不说了,\(r=1\)就是个裸的自然数幂次和直接爱怎么搞怎么搞了,所以以下都假设\(r>1\)
设
\]
我们要求的就是\(s_k\)
因为有
\]
\]
两个柿子减一减
\]
然后来考虑后面这个东西
\sum_{i=2}^nr^i\left((i-1)^k-i^k\right)
&=\sum_{i=2}^nr^i\left(\sum_{j=0}^k{k\choose j}i^j(-1)^{k-j}-i^k\right)\\
&=\sum_{i=2}^nr^i\sum_{j=0}^{k-1}{k\choose j}i^j(-1)^{k-j}\\
&=\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}\sum_{i=2}^nr^ii^j\\
&=\sum_{j=0}^{k-1}{k\choose j}(-1)^{k-j}\left(s(j)-r\right)\\
\end{aligned}
\]
那么就可以\(O(k^2)\)递推了
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll 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=2005,P=1e9+7;
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 ll y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
return res;
}
int fac[N],ifac[N],inv[N],Pre[N],suf[N],f[N],s[N];
ll n,r;int k,m;
inline int C(R int n,R int m){return 1ll*fac[n]*ifac[m]%P*ifac[n-m]%P;}
void init(int n=N-1){
inv[0]=inv[1]=ifac[0]=ifac[1]=fac[0]=fac[1]=1;
fp(i,2,n){
fac[i]=mul(fac[i-1],i),
inv[i]=mul(P-P/i,inv[P%i]),
ifac[i]=mul(ifac[i-1],inv[i]);
}
}
int Lagrange(){
n%=P;
fp(i,1,k+2)f[i]=add(f[i-1],ksm(i,k));
if(n<=k+2)return f[n];
m=k+2;
Pre[0]=1;fp(i,1,m)Pre[i]=mul(Pre[i-1],n-i);
suf[m+1]=1;fd(i,m,1)suf[i]=mul(suf[i+1],n-i);
int res=0,ty=(m-1)&1?P-1:1;
fp(i,1,m)res=add(res,1ll*f[i]*ty%P*Pre[i-1]%P*suf[i+1]%P*ifac[m-i]%P*ifac[i-1]%P),ty=P-ty;
return res;
}
int calc(){
if(!r)return 0;
R int p=ksm(r,n+1),q=1,invr=ksm(r-1,P-2),ty;
s[0]=mul(dec(p,r),invr),n%=P;
fp(i,1,k){
q=mul(q,n),s[i]=dec(mul(p,q),r),ty=(i&1)?P-1:1;
fp(j,0,i-1)s[i]=add(s[i],1ll*C(i,j)*ty%P*dec(s[j],r)%P),ty=P-ty;
s[i]=mul(s[i],invr);
}
return s[k];
}
int main(){
// freopen("testdata.in","r",stdin);
init();
int T;scanf("%lld",&T);
while(T--){
scanf("%lld%d%lld\n",&n,&k,&r),r%=P;
printf("%d\n",r==1?Lagrange():calc());
}
return 0;
}
[51nod]1229 序列求和 V2(数学+拉格朗日差值)的更多相关文章
- 51nod 1258 序列求和 V4
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4 基准时间限制:8 秒 空间限制:131 ...
- 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]
1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...
- 51nod 1228 序列求和(伯努利数)
1228 序列求和 题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 T(n) = n^k,S(n) = T(1 ...
- 51nod1229 序列求和 V2 【数学】
题目链接 B51nod1229 题解 我们要求 \[\sum\limits_{i = 1}^{n}i^{k}r^{i}\] 如果\(r = 1\),就是自然数幂求和,上伯努利数即可\(O(k^2)\) ...
- 51nod1229 序列求和 V2
这题...毒瘤吧,可能要写两份代码... 传送门 noteskey 我们考虑这里的复杂度肯定是与 k 相关的,而且平方也是没问题的,那么我们先看看 S(k) 能怎么得到: \[\begin{align ...
- 51Nod 1228 序列求和
T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n). 例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...
- P5437-[XR-2]约定【拉格朗日差值,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 \(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\).随机选出一个生成树, ...
- [51nod 1822]序列求和
\(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...
- 51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )
C为组合数,B为伯努利数 具体推到过程略 参考博客:http://blog.csdn.net/acdreamers/article/details/38929067# (我的式子和博客中的不一样,不过 ...
随机推荐
- 【DevExpress】1、SearchLookUpEdit详解
一.属性的基本介绍: 绑定数据源: lookUpEdit.Properties.ValueMember = 实际要用的字段; //相当于Editvalue lookUpEdit.Propertie ...
- 转gif图
用QQ影音截取影片 + Ulead GIF Animator510编辑.
- delphi 四舍五入
trunc取整 四舍五入 formatfloat('0.00', 2.1850) 看第二位,然后对后面的数字处理,偶数的话舍去,奇数四舍五入 System.Math.RoundTo(tempval,- ...
- Libevent使用例子,从简单到复杂
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39670221 本文从简单到复杂,展示如何使用libevent.网上的许多例子都是只有服务 ...
- Logstash安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)
前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticsearch-2.4.3的3节点安装(多种方式图文 ...
- ubuntu安装vsftpd
使用以下命令安装vsftpd: apt-get install vsftpd 安装完成后,文件服务器已经开启了. 然后就可以连接,可以使用xftp等工具,在上传和下载的时候要注意权限,不然会失败.
- smack 监听不同packet机制
之前做即时通讯,扒了smack源码来参考.说下其中解包后进行通知的机制. Filter类:accept(Packet packet)函数,传入packet在此函数中进行对比判断,返回true 则通过此 ...
- request.getHeader("x-forwarded-for")这是什么意思
request.getHeader,简单的说就是获取请求的头部信息,根据http协议,它能获取到用户访问链接的信息,以下是我们常用的: request.getHeader("referer& ...
- Python_13-Office文件数据操作
目录: 1.1 安装win32com模块 1.2 Access数据库操作 1.2.1 建立db1.db数据库,设计一张表t_student_b 1.3 Exc ...
- 使用composer安装laravel5.4
composer create-project --prefer-dist laravel/laravel blog 后面的是文件目录