题面传送门

其实是一道还好的题罢,虽然做了我 2147483647(bushi,其实是 1.5h),估计也只是因为 HDU 不支持数据下载所以错误总 debug 出来

首先看到 \(10^9+9\) 及斐波那契数列,顿时心里一个激灵,这题和通项公式逃不掉了(

套用斐波那契数列通项公式 \(f_n=\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^n-(\dfrac{1-\sqrt{5}}{2})^n)\) 得:

\[\begin{aligned}
\text{Ans}&=\sum\limits_{i=0}^nF_{ic}^k
\\&=\sum\limits_{i=0}^n(\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic}))^k
\\&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic})^k
\end{aligned}
\]

看到二项式的 \(k\) 次方,可以套路地想到二项式定理,用二项式定理展开一下可继续推得:

\[\begin{aligned}
\text{Ans}&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic})^k\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{1+\sqrt{5}}{2})^{icj}(-(\dfrac{1-\sqrt{5}}{2})^{ic})^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{1+\sqrt{5}}{2})^{icj}(\dfrac{1-\sqrt{5}}{2})^{ic(k-j)}(-1)^{k-j}
\end{aligned}
\]

方便起见,我们设 \(A=\dfrac{1+\sqrt{5}}{2},B=\dfrac{1-\sqrt{5}}{2}\),那么式子可进一步化为

\[\begin{aligned}
\text{Ans}
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}A^{icj}B^{ic(k-j)}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}A^{icj}B^{ick}\dfrac{1}{B^{icj}}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{A}{B})^{icj}B^{ick}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{j=0}^k(-1)^{k-j}\dbinom{k}{j}\sum\limits_{i=0}^n(\dfrac{A}{B})^{icj}B^{ick}
\end{aligned}
\]

推到这里,前面一个 \(\sum\) 显然直接枚举是不会出问题的,至于后面一个 \(\sum\),如果我们设 \(P=(\dfrac{A}{B})^{cj}\times B^{ck}\),那么里面的式子可写为 \(\sum\limits_{i=0}^nP^i\),这显然就是一个等比数列求和的形式,直接求即可。

时间复杂度 \(Tk\log n\),顺带说一句,本题略微有点卡常,有以下卡常技巧:

  • 式子里有些东西是可以预处理出来的,大可不必每枚举一遍 \(j\) 都重新快速幂计算一遍,否则常数肯定上天
  • 在等比数列求和时,由于 \(10^9+9\) 是质数,可以通过欧拉降幂 \(a^m\equiv a^{m\bmod (10^9+8)}\pmod{10^9+9}\) 减少快速幂的指数,这样常数可小一半
const int S5=383008016;
const int MOD=1e9+9;
const int INV2=5e8+5;
const int MAXN=1e5;
int qpow(int x,ll e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int IV5,A,B,MUL,fac[MAXN+5],ifac[MAXN+5];
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=ifac[1]=1)+1;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int binom(int n,int k){return 1ll*fac[n]*ifac[k]%MOD*ifac[n-k]%MOD;}
int sum(int x,ll y){if(x==1) return (y+1)%MOD;return 1ll*(qpow(x,(y+1)%(MOD-1))-1+MOD)*qpow((x-1+MOD)%MOD,MOD-2)%MOD;}
void solve(){
ll n,c;int k;scanf("%lld%lld%d",&n,&c,&k);c%=(MOD-1);
int mul=qpow(IV5,k),ans=0,M=qpow(qpow(B,c),k),stp=qpow(MUL,c);
for(int i=0,pw=1;i<=k;i++,pw=1ll*pw*stp%MOD){
int t=1ll*pw*M%MOD;
int add=1ll*binom(k,i)*sum(t,n)%MOD;
if((k-i)&1) ans=(ans-add+MOD)%MOD;
else ans=(ans+add)%MOD;
} ans=1ll*ans*mul%MOD;printf("%d\n",ans);
}
int main(){
IV5=qpow(S5,MOD-2);
A=1ll*(1+S5)*INV2%MOD;
B=1ll*(1-S5+MOD)*INV2%MOD;
MUL=1ll*A*qpow(B,MOD-2)%MOD;
init_fac(MAXN);int qu;scanf("%d",&qu);
while(qu--) solve();
return 0;
}

HDU 6755 - Fibonacci Sum(二项式定理+推式子)的更多相关文章

  1. bzoj 3157 && bzoj 3516 国王奇遇记——推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

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

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

  3. 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)

    洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...

  4. [HAOI2007]分割矩阵 DP+推式子

    发现最近好少写博客啊(其实是各种摆去了) 更一点吧 这道题要求最小化均方差,其实凭直觉来说就是要使每个块分的比较均匀一点,但是单单想到想到这些还是不够的, 首先f[i][j][k][l][t]表示以( ...

  5. P3768 简单的数学题 杜教筛+推式子

    \(\color{#0066ff}{ 题目描述 }\) 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ij ...

  6. bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

  7. HZOJ 20190727 T2 单(树上dp+乱搞?+乱推式子?+dfs?)

    考试T2,考试时想到了40pts解法,即对于求b数组,随便瞎搞一下就oxxk,求a的话,很明显的高斯消元,但考试时不会打+没开double挂成10pts(我真sb),感觉考试策略还是不够成熟,而且感觉 ...

  8. luogu P4948 数列求和 推式子 简单数学推导 二项式 拉格朗日插值

    LINK:数列求和 每次遇到这种题目都不太会写.但是做法很简单. 终有一天我会成功的. 考虑类似等比数列求和的东西 帽子戏法一下. 设\(f(k)=\sum_{i=1}^ni^ka^i\) 考虑\(a ...

  9. hdu 3117 Fibonacci Numbers 矩阵快速幂+公式

    斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...

随机推荐

  1. 脚本注入1(boolean&&get)

    现在,我们回到之前,练习脚本支持的布尔盲注(get型). 布尔盲注的应用场景是查询成功和失败时回显不同,且存在注入点的地方. 这里以Less-8为例: 发现查询成功时,会显示:失败则无回显. 同时发现 ...

  2. Noip模拟30 2021.8.4

    T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照 ...

  3. 2021.8.16考试总结[NOIP模拟41]

    T1 你相信引力吗 肯定是单调栈维护.但存在重复值,还是个环,不好搞. 发现取区间时不会越过最大值,因此以最大值为断点将环断为序列.在栈里维护当前栈中有多少个与当前元素相等的元素,小分类讨论一下. 最 ...

  4. 设计AOV网拓扑排序的算法

    拓扑排序 对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一) 思想 从AOV网选择一个没有前驱的顶点并输出 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧 重复上述两步,直到全部顶点都被输出, ...

  5. 攻防世界 杂项 12.Training-Stegano-1

    题目描述: 这是我能想到的最基础的图片隐写术.啊这 题目分析: 最初还以为直接右击属性查看呢 然后用notepad++看看,一团乱码,结果在最后发现了passwd, 然后这就是flag:stegano ...

  6. MyBatis源码分析(二):MyBatis整体架构及原理

    一.Mybatis整体架构导图 二.Mybatis的核心组成 SqlSessionFactoryBuilder(构造器): 根据配置信息(XML)生成SqlSessionFactory工厂接口,构造器 ...

  7. 同人逼死官方系列!从 DDC 嗅探器到 sddc_sdk_lib 的数据解析

    从 DDC 嗅探器到 sddc_sdk_lib 的数据解析 之前的 DDC 协议介绍 主要讲了设备加入.退出以及维持设备状态,而 SDK框架 sddc_sdk_lib 解析 主要讲了 SDK 库的结构 ...

  8. ES查询区分大小写

    ES查询区分大小写 ES查询在默认的情况下是不区分大小写的,在5.0版本之后将string类型拆分成两种新的数据类型,text用于全文搜索(模糊搜索),keyword用于关键字搜索(精确搜索). 注意 ...

  9. surrounded-regions leetcode C++

    Given a 2D board containing'X'and'O', capture all regions surrounded by'X'. A region is captured by ...

  10. Java不同时区(timezone)之间时间转换

    最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...