Solution -「国家集训队」「洛谷 P4451」整数的 lqp 拆分
\(\mathcal{Description}\)
Link.
求
\]
其中 \(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)\) 能推出其自身而解出表达式。具体地:
&~~~~~~~~~~~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\}\) 的 OGF 为 \(G(x)\),则:
G(x)&=1+G(x)F(x)\\
&=\frac{1}{1-F(x)}\\
&=\frac{1-x-x^2}{1-2x-x^2}
\end{aligned}
\]
提出一些常数:
\]
我们想求 \(g_n\),即 \([x^n]G(x)\),就得把上式最后一项分式结构配凑成等比数列求和的形式。首先暴力因式分解 \(x^2+2x-1\),用求根公式求出其两根:
\]
所以 \(x^2+2x-1=(x-x_1)(x-x_2)\)。代入 \(G(x)\) 的表达式:
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_{1,2}\):
\]
最后 \(\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 拆分的更多相关文章
- P4827「国家集训队」 Crash 的文明世界
「国家集训队」 Crash 的文明世界 提供一种不需要脑子的方法. 其实是看洛谷讨论版看出来的( (但是全网也就这一篇这个方法的题解了) 首先这是一个关于树上路径的问题,我们可以无脑上点分治. 考虑当 ...
- 「国家集训队」middle
「国家集训队」middle 传送门 按照中位数题的套路,二分答案 \(mid\),序列中 \(\ge mid\) 记为 \(1\),\(< mid\) 的记为 \(-1\) 然后只要存在一个区间 ...
- 「国家集训队」小Z的袜子
「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ...
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- Solution -「POI 2010」「洛谷 P3511」MOS-Bridges
\(\mathcal{Description}\) Link.(洛谷上这翻译真的一言难尽呐. 给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
随机推荐
- RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
1.前言 RabbleMQ这种消息中间件,主要的功能是使用异步操作,来达到解耦的目的,比如,有系统a和系统b, 系统a通过消息中间件通知系统b来做业务,那么系统a只需要把要做的事情[也就是消息]发给消 ...
- win11系统设置笔记本合盖上不休眠
第一步.打开控制面板 第二步.打开控制面板 第三步.打开电源选项 第四步.如下图操作即可
- .gitignore文件编写规则
1.gitignore说明 在使用git的过程中,一般我们总会有些文件无需纳入git的管理,也不希望它们总出现在未跟踪文件列表,这些文件通常是日志文件.临时文件.编译产生的中间文件.工具自动生成的文件 ...
- 还在用visio?这款画图工具才是真的绝!
最近有读者私信我,问我推文的配图是用什么工具画的,很好看,也想学习一下.今天就给大家介绍一下这款画图工具--Draw.io 概述 draw.io是一款免费的网页版画图工具(也有桌面版),支持流程图.U ...
- 18张图,详解SpringBoot解析yml全流程
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在yml文件中配置了一个属性作为开关,再配合nacos就可 ...
- leetcode 1288. 删除被覆盖区间
问题描述 给你一个区间列表,请你删除列表中被其他区间所覆盖的区间. 只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖. 在完成所有删除操作后 ...
- java继承子类实例化过程(细节解释)
1 package face_08; 2 class Fu{ 3 Fu(){ 4 super(); 5 show(); 6 return; 7 } 8 void show() { 9 System.o ...
- JVM之栈、堆、方法区(三)
一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...
- django学习总结1
## 内容回顾 #### 1.所有的命令 ##### 下载安装 pip install django==1.11.20 - i 源 ##### 创建项目 django-admin startp ...
- 羽夏看Win系统内核—— APC 篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...