Description

WZ是个蛋痛的人,总是喜欢琢磨蛋痛的事,比如他最近想知道上楼梯总共有多少种方式。已知他一步可以迈一阶、两阶或者三阶,现在给你楼梯的阶数,让你计算总共有多少种方式。

Input

输入有多组数据,每组数据占一行,表示楼梯的阶数。(1<=N<=100,000,000,000)

Output

对于每组数据,输出一行,表示上楼方式的总数 % 1000000007。

Sample Input

1
2

Sample Output

1
2

Source

Unknown
#include<bits/stdc++.h>
using namespace std;
#define ll long longconst int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int maxn = 1000 + 8;ll n;struct matrix
{ll m[3][3];
}b, tp, res, init;matrix mul(matrix a, matrix b)
{matrix c;for(int i = 0; i < 3; i++){for(int j = 0; j < 3; j++){c.m[i][j] = 0;for(int k = 0; k < 3; k++){c.m[i][j] += (a.m[i][k] * b.m[k][j]) % mod;c.m[i][j] %= mod;}}}return c;
}matrix matrix_mi(matrix p, ll k)
{matrix t = res;while(k){if(k & 1)t = mul(t, p);k >>= 1;p = mul(p, p);}return t;
}int main()
{
//    std::ios::sync_with_stdio(0);
//    cin.tie(0);
//    cout.tie(0);for(int i = 0; i < 3; i++)for(int j = 0; j < 3; j++)init.m[i][j] = 0;for(int i = 0; i < 3; i++)init.m[0][i] = 1;init.m[1][0] = 1;init.m[2][1] = 1;for(int i = 0; i < 3; i++)for(int j = 0; j < 3; j++)if(i == j)res.m[i][j] = 1;elseres.m[i][j] = 0;while(cin >> n){b = init;if(n == 1)cout << "1" << '\n';else if(n == 2)cout << "2" << '\n';else if(n == 3)cout << "4" << '\n';else{tp = matrix_mi(b, n - 3);cout << ((4 * tp.m[0][0]) % mod + (2 * tp.m[0][1]) % mod + tp.m[0][2] % mod) % mod << '\n';}}return 0;
}

转载于:https://www.cnblogs.com/RootVount/p/11559755.html

SDNU 1085.爬楼梯再加强版(矩阵快速幂)相关推荐

  1. 20181023(模拟+矩阵快速幂及推公式+最短路+不知道什么DP)

    NOIP欢乐%你赛 1. 小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力 ...

  2. 数论-快速幂、矩阵快速幂、慢速乘

    文章目录 快速幂 矩阵快速幂 慢速乘 例题 HDU-2817 HDU-3117 XUJC-1395 快速幂 首先幂运算 a n a^n an就是 n n n个 a a a相乘,我们可以直接调用库函数 ...

  3. 加强版斐波那契数列(矩阵快速幂)

    关于快速幂的讲解可以参见我的上一篇博客<快速幂> 题目链接:又见斐波那契 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对10 9+7取模. ...

  4. SDNU 1062.Fibonacci(矩阵快速幂)

    Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. I ...

  5. 又见斐波那契~矩阵快速幂入门题

    链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...

  6. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

  7. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  8. bzoj 1409 Password 矩阵快速幂+欧拉函数

    可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...

  9. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

最新文章

  1. 胡小明:大数据应用方向思考
  2. java守护线程和用户线程
  3. mvc ajax给control传值问题
  4. junit5和junit4_JUnit 5 –设置
  5. 中小型互联网企业迁移上云,保证云端资源安全迁移
  6. java knn文本分类算法_使用KNN算法的文本分类.PDF
  7. threadingdaemonmultiprocessing
  8. 某企业虚拟化平台时间同步异常排查
  9. 携程是如何借助“预测式外呼”提高呼叫效率的
  10. 如何优雅的关闭Golang Channel?
  11. Windows下保存git账号密码实现免输入
  12. JS如何判断一个对象是否为JSON对象
  13. 当360屠榜黑客奥斯卡,我们为什么要关注国家级网络安全战?
  14. mysql临时表在哪找_MySQL 中的临时表
  15. 微信群运营怎么做?一文讲透社群活跃技巧及发展模式
  16. 微信公众号文章爬取方法整理
  17. 谈谈利用统计工具做好网站数据分析
  18. 2013年将成为传统店铺的末日?
  19. TortoiseSVN (Subversion客户端) 使用手册(中文) (六)
  20. 微型计算机最核心的补件,春季高考试卷-天津市2016年春季高考计算机模拟试卷B【精】.doc...

热门文章

  1. 自定义的Sort对象
  2. 单个下拉框数据保持问题
  3. 点击关闭按钮时缩小到系统任务栏
  4. springmvc学习笔记--ueditor和springmvc的集成
  5. 《面向对象程序设计课程学习进度条》
  6. Oracle的下载安装教程以及所出现的问题
  7. springMVC接收前端参数的方式
  8. Object调用静态方法
  9. Centos升级gcc4.4.7升级gcc4.8手记
  10. [詹兴致矩阵论习题参考解答]习题7.1