\(\mathcal{Description}\)

  Link.

  求

\[\sum_{m>0\\a_{1..m}>0\\a_1+\cdots+a_m=n}\prod_{i=1}^mf_{a_i}
\]

  其中 \(f_i\) 为 Fibonacci 数列第 \(i\) 项(\(f_0=0,f_1=1\)),答案对 \(10^9+7\) 取模。

  \(n\le10^{10^4}\)。

\(\mathcal{Solution}\)

  记 \(F(x)\) 为 \(\{f\}\) 的 OGF,首先来推导 \(F(x)\)。根据定义 \(f_{n+2}=f_{n+1}+f_n\),可以发现经过适当位移,\(F(x)\) 能推出其自身而解出表达式。具体地:

\[\begin{aligned}
&~~~~~~~~~~~xF(x)+F(x)=\frac{1}xF(x)-1\\
&\Rightarrow~~~~(x+1-\frac{1}x)F(x)=-1\\
&\Rightarrow~~~~F(x)=\frac{x}{1-x-x^2}
\end{aligned}
\]

  令 \(n\) 的答案为 \(g_n\),\(g_0=1\)。简单 DP 得出递推式:

\[g_n=\sum_{i=1}^nf_ig_{n-i}
\]

  显然的卷积关系。令 \(\{g\}\) 的 OGF 为 \(G(x)\),则:

\[\begin{aligned}
G(x)&=1+G(x)F(x)\\
&=\frac{1}{1-F(x)}\\
&=\frac{1-x-x^2}{1-2x-x^2}
\end{aligned}
\]

  提出一些常数:

\[\Rightarrow~~~~G(x)=1-\frac{x}{x^2+2x-1}
\]

  我们想求 \(g_n\),即 \([x^n]G(x)\),就得把上式最后一项分式结构配凑成等比数列求和的形式。首先暴力因式分解 \(x^2+2x-1\),用求根公式求出其两根:

\[x_{1,2}=\frac{-2\pm2\sqrt{2}}{2}=-1\pm\sqrt2
\]

  所以 \(x^2+2x-1=(x-x_1)(x-x_2)\)。代入 \(G(x)\) 的表达式:

\[\begin{aligned}
G(x)&=1-\frac{x}{(x-x_1)(x-x_2)}\\
&=1-\frac{x}{x_1-x_2}\left(\frac{1}{x-x_1}-\frac{1}{x-x_2} \right)\\
&=1-\frac{x}{x_1-x_2}\left(\frac{1}{x_2}\sum_{i=0}^{+\infty}\frac{x^i}{x_2^i}-\frac{1}{x_1}\sum_{i=0}^{+\infty}\frac{x^i}{x_1^i} \right)\\
&=1-\frac{1}{x_1-x_2}\sum_{i=1}^{+\infty}(x_2^{-i}-x_1^{-i})x^i
\end{aligned}
\]

  拆得清清楚楚啦,答案:

\[[x^n]G(x)=(x_2-x_1)^{-1}(x_2^{-n}-x_1^{-n})
\]

  代入 \(x_{1,2}\):

\[[x^n]G(x)=-\frac{\sqrt2}4[(1-\sqrt2)^n-(1+\sqrt2)^n]
\]

  最后 \(\sqrt2\equiv 59713600\equiv 940286407\pmod{10^9+7}\),所以可以 \(\mathcal O(\log p+\log n)\)(\(p\) 是素模数)直接算出来。

\(\mathcal{Code}\)

/* Clearink */

#include <cstdio>

const int INV4 = 250000002, S2 = 59713600, MOD = 1e9 + 7;

inline int rmod () {
int x = 0; char s = getchar ();
for ( ; s < '0' || '9' < s; s = getchar () );
for ( ; '0' <= s && s <= '9'; s = getchar () ) {
x = ( x * 10ll + ( s ^ '0' ) ) % ( MOD - 1 );
}
return x;
} inline int mul ( const long long a, const int b ) { return a * b % MOD; }
inline int sub ( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline int add ( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mpow ( int a, int b ) {
int ret = 1;
for ( ; b; a = mul ( a, a ), b >>= 1 ) ret = mul ( ret, b & 1 ? a : 1 );
return ret;
} int main () {
int n = rmod ();
printf ( "%d\n", sub ( 0, mul ( mul ( S2, INV4 ),
sub ( mpow ( sub ( 1, S2 ), n ), mpow ( add ( 1, S2 ), n ) ) ) ) );
return 0;
}

Solution -「国家集训队」「洛谷 P4451」整数的 lqp 拆分的更多相关文章

  1. P4827「国家集训队」 Crash 的文明世界

    「国家集训队」 Crash 的文明世界 提供一种不需要脑子的方法. 其实是看洛谷讨论版看出来的( (但是全网也就这一篇这个方法的题解了) 首先这是一个关于树上路径的问题,我们可以无脑上点分治. 考虑当 ...

  2. 「国家集训队」middle

    「国家集训队」middle 传送门 按照中位数题的套路,二分答案 \(mid\),序列中 \(\ge mid\) 记为 \(1\),\(< mid\) 的记为 \(-1\) 然后只要存在一个区间 ...

  3. 「国家集训队」小Z的袜子

    「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...

  4. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  5. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  6. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  7. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  8. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  9. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

随机推荐

  1. RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】

    1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...

  2. win11系统设置笔记本合盖上不休眠

    第一步.打开控制面板 第二步.打开控制面板 第三步.打开电源选项 第四步.如下图操作即可

  3. .gitignore文件编写规则

    1.gitignore说明 在使用git的过程中,一般我们总会有些文件无需纳入git的管理,也不希望它们总出现在未跟踪文件列表,这些文件通常是日志文件.临时文件.编译产生的中间文件.工具自动生成的文件 ...

  4. 还在用visio?这款画图工具才是真的绝!

    最近有读者私信我,问我推文的配图是用什么工具画的,很好看,也想学习一下.今天就给大家介绍一下这款画图工具--Draw.io 概述 draw.io是一款免费的网页版画图工具(也有桌面版),支持流程图.U ...

  5. 18张图,详解SpringBoot解析yml全流程

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在yml文件中配置了一个属性作为开关,再配合nacos就可 ...

  6. leetcode 1288. 删除被覆盖区间

    问题描述 给你一个区间列表,请你删除列表中被其他区间所覆盖的区间. 只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖. 在完成所有删除操作后 ...

  7. java继承子类实例化过程(细节解释)

    1 package face_08; 2 class Fu{ 3 Fu(){ 4 super(); 5 show(); 6 return; 7 } 8 void show() { 9 System.o ...

  8. JVM之栈、堆、方法区(三)

    一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...

  9. django学习总结1

    ## 内容回顾 #### 1.所有的命令 ##### 下载安装 ​ pip install django==1.11.20 - i 源 ##### 创建项目 ​ django-admin startp ...

  10. 羽夏看Win系统内核—— APC 篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...