题解 [51nod1358] 浮波那契

题面

解析

首先根据经验应该能一眼矩阵快速幂加速....

因为给了你递推式,并且\(O(n)\)求显然不可能.

所以考虑怎么构造矩阵.

首先要处理的是小数的问题,

这里我们可以把\(n\)扩大5倍,

那么就变成了

\[\begin{equation}f(n)=\left\{ \begin{array}{**lr**} 1 ,n\leq20 & \\ f(n-5)+f(n-17),otherwise \end{array}\right.\end{equation}
\]

然后考虑怎么构造矩阵,

想一想,一开始矩阵应该是这个样子:

\[\left[
\begin{matrix}
f(n-1)&f(n-2)&\dots&f(n-17)
\end{matrix}
\right]
\]

乘上一个矩阵得到

\[\left[\begin{matrix}f(n)&f(n-1)\dots&f(n-16)\end{matrix}\right]
\]

然后因为有重复的项我们就设为\(1\),再把递推的地方设为\(1\),其它地方设为\(0\).

讲的太不清楚了还是直接看矩阵吧

\[\left[\begin{matrix}01000000000000000&\\00100000000000000&\\00010000000000000&\\00001000000000000&\\10000100000000000&\\00000010000000000&\\00000001000000000&\\00000000100000000&\\00000000010000000&\\00000000001000000&\\00000000000100000&\\00000000000010000&\\00000000000001000&\\00000000000000100&\\00000000000000010&\\00000000000000001&\\10000000000000000&\\\end{matrix}\right]
\]

实际上结合矩阵乘法想一想应该就行了.

接下来直接跑矩阵快速幂即可.

code:

#include <iostream>
#include <cstring>
#include <cstdio>
#define ll long long
using namespace std; inline int read(){
int sum=0,f=1;char c=getchar();
while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0'){sum=sum*10+c-'0';c=getchar();}
return f*sum;
} const int N=101;
const int Mod=1000000007;
struct mat{
ll f[N][N];
inline void clear(){memset(f,0,sizeof f);}
inline void init(){clear();for(int i=0;i<N;i++) f[i][i]=1;}
}a,b;
ll n; inline mat operator*(mat a,mat b){
mat c;c.clear();
for(int k=0;k<17;k++){
for(int i=0;i<17;i++){
ll t=a.f[i][k];
for(int j=0;j<17;j++) c.f[i][j]=(c.f[i][j]+t*b.f[k][j])%Mod;
}
}
return c;
} inline mat fpow(mat a,ll b){
mat ret;ret.init();
for(;b;a=a*a,b>>=1) if(b&1) ret=ret*a;
return ret;
} signed main(){
n=read();
if(n<=4){puts("1");return 0;}
for(int i=0;i<17;i++) a.f[0][i]=1;
for(int i=0;i<16;i++) b.f[i][i+1]=1;
b.f[4][0]=1;b.f[16][0]=1;
a=a*fpow(b,n*5-20);
printf("%lld\n",a.f[0][0]);
return 0;
}

题解 [51nod1358] 浮波那契的更多相关文章

  1. 洛谷P1720 月落乌啼算钱 题解 斐波那契数列/特征方程求解

    题目链接:https://www.luogu.com.cn/problem/P1720 题目描述: 给你一个公式 ,求对应的 \(F_n\) . 解题思路: 首先不难想象这是一个斐波那契数列,我们可以 ...

  2. 【20180808模拟测试】T2 k-斐波那契

    描述 k-斐波拉契数列是这样的 f(0)=k;f(1)=k;f(n)=(f(n-1)+f(n-2))%P(n>=2); 现在我们已经知道了f(n)=1,和P: k的范围是[1,P); 求k的所有 ...

  3. OrzFAng系列–树 解题报告

    题目描述 方方方种下了三棵树,两年后,第二棵树长出了n个节点,其中1号节点是根节点. 给定一个n个点的树 支持两种操作 方方方进行m次操作,每个操作为: (1)给出两个数i,x,将第i个节点的子树中, ...

  4. 数学3(博弈+splya)

    数学3(博弈+splya) 标签: 数学 hdu_5194 (打表找规律) 题意 有n和黑球和m个白球,现在一个个的取出这些球,如果是黑球则当前标记为1,白球为0,那么当取完这些球会得到一些序列.问你 ...

  5. 【题解】斐波拉契 luogu3938

    题目 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子. ...

  6. cojs 疯狂的粉刷匠 疯狂的斐波那契 题解报告

    疯狂的斐波那契 学习了一些奇怪的东西之后出的题目 最外层要模p是显然的,然而内层并不能模p 那么模什么呢,显然是模斐波那契的循环节 那么我们可以一层层的求出每层的斐波那契循环节 之后在从内向外用矩阵乘 ...

  7. P1962 斐波那契数列-题解(矩阵乘法扩展)

    https://www.luogu.org/problemnew/show/P1962(题目传送) n的范围很大,显然用普通O(N)的递推求F(n)铁定超时了.这里介绍一种用矩阵快速幂实现的解法: 首 ...

  8. C#版 - 剑指offer 面试题9:斐波那契数列及其变形(跳台阶、矩形覆盖) 题解

    面试题9:斐波那契数列及其变形(跳台阶.矩形覆盖) 提交网址: http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3?tp ...

  9. 题解 P2626 【斐波那契数列(升级版)】

    这道题,大家一定要注意: 要对2^31取模 ! ( 本蒟蒻开始没注意到这一点,WA了 ) (不过大家在试样例的时候,试试47,出不了结果,就说明你没模2^31) 总体来说,这道题考查的知识点就两个: ...

随机推荐

  1. Eclipse控制台不限日志行数

    在使用Eclipse时,如果控制台输出的内容比较多,控制台之前的内容就会消失,导致前面的控制台打印信息无法查看. 设置Eclipse的控制台属性 设置方法: 打开Eclipse的菜单栏:Window ...

  2. smarty中常用的流程控制逻辑

    if else {if $age > 18} <div>年满十八岁!</div> {else if $age > 16} <div>年满十六岁!< ...

  3. python 之 数据库(修改表、复制表、删除表、单表查询)

    10.8 修改表.复制表.删除表 10.81 修改表 alter table . 修改表名 alter table 表名 rename 新表名; . 增加字段 alter table 表名 add 字 ...

  4. ALV报表——表头实现

    ABAP实现ALV表头的DEMO: 运行效果: 代码: *********************************************************************** ...

  5. AS3动画效果常用公式

    缓动公式: sprite.x += (targetX – sprite.x) * easing;//easing为缓动系数变量 sprite.y += (targetY – sprite.y) * e ...

  6. 题解-CSA Round#18 Randomly Permuted Costs

    Problem CSA Round 18 题意概要:给定一个有重边有自环 \(n\) 点 \(m\) 边的有向无环图(DAG),每条边有其权值,每当你走到一个点 \(x\) 时,所有从 \(x\) 连 ...

  7. flume-ng version出现错误Error: Could not find or load main class org.apache.flume.tools.GetJavaPrope的解决办法

    错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty或者Error: Could not find or load main class org. ...

  8. windows下批处理保留指定日期下的文件

    @echo offchcp 65001setlocal enabledelayedexpansion ::设置操作路径set "pic_dir=D:\465"echo 开始清理.. ...

  9. js的变量类型

    参考网址:https://www.cnblogs.com/focusxxxxy/p/6390536.html (讲的蛮好得,图文并茂,我下面只是总结下) 一:ECMAScirpt 变量的两种数据类型 ...

  10. BeautifulSoup库的安装与使用

    BeautifulSoup库的安装 Win平台:“以管理员身份运行” cmd 执行 pip install beautifulsoup4 演示HTML页面地址:http://python123.io/ ...