题目地址:http://ac.jobdu.com/problem.php?pid=1081

题目描述:

给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q。这里n >= 2。 求第k个数对10000的模。

输入:

输入包括5个整数:a0、a1、p、q、k。

输出:

第k个数a(k)对10000的模。

样例输入:
  1. 20 1 1 14 5
样例输出:
  1. 8359
  1. #include <stdio.h>
  2.  
  3. #define MOD 10000
  4.  
  5. typedef struct matrix{
  6. int a00, a01, a10, a11;
  7. }Matrix;
  8.  
  9. void MatrixMul(Matrix * m, Matrix * n){
  10. Matrix tmp;
  11. tmp.a00 = (m->a00 * n->a00 + m->a01 * n->a10) % MOD;
  12. tmp.a01 = (m->a00 * n->a01 + m->a01 * n->a11) % MOD;
  13. tmp.a10 = (m->a10 * n->a00 + m->a11 * n->a10) % MOD;
  14. tmp.a11 = (m->a10 * n->a01 + m->a11 * n->a11) % MOD;
  15. *m = tmp;
  16. }
  17.  
  18. int main(void){
  19. int a0, a1, p, q, k;
  20.  
  21. while (scanf ("%d%d%d%d%d",
  22. &a0, &a1, &p, &q, &k) != EOF){
  23. if (k == 0) {printf ("%d\n", a0 % MOD); continue;}
  24. if (k == 1) {printf ("%d\n", a1 % MOD); continue;}
  25. Matrix pq = {p%MOD, q%MOD, 1, 0};
  26. Matrix ans = {1, 0, 0, 1};
  27. --k;
  28. while (k >= 1){
  29. if ((k & 1) == 1)
  30. MatrixMul (&ans, &pq);
  31. MatrixMul (&pq, &pq);
  32. k = k >> 1;
  33. }
  34. printf ("%d\n", (ans.a00*a1+ans.a01*a0) % MOD);
  35. }
  36.  
  37. return 0;
  38. }
参考资料:十个利用矩阵乘法解决的经典题目

九度OJ 1081 递推数列 -- 矩阵二分乘法的更多相关文章

  1. 【九度OJ】题目1474:矩阵幂 解题报告

    [九度OJ]题目1474:矩阵幂 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1474 题目描述: 给定一个n*n的矩阵,求该矩阵的 ...

  2. 【九度OJ】题目1193:矩阵转置 解题报告

    [九度OJ]题目1193:矩阵转置 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1193 题目描述: 输入一个N*N的矩阵,将其转置 ...

  3. 【九度OJ】题目1191:矩阵最大值 解题报告

    [九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...

  4. 九度OJ 1081:递推数列 (递归,二分法)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...

  5. 九度oj 题目1496:数列区间

    题目描述: 有一段长度为n(1<=n<=1000000)的数列,数列中的数字从左至右从1到n编号.初始时数列中的数字都是0. 接下来我们会对其进行m(1<=m<=100000) ...

  6. 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模

    题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...

  7. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

  8. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  9. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

随机推荐

  1. 解决Hadoop-Eclipse-Plugin放在Plugin目录下没反应的问题

    有时候自己编译或者下载的Hadoop-Eclipse-Plugin放到Eclipse的Plugin目录下面,启动Eclipse没有反应,即看不到小象和Map/Reduce视图.可以通过查看Eclips ...

  2. Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连

    学习过程中大家都碰到过连接被断开的问题给困扰吧,下面教大家如何做到连接断开后,重新连接 首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面 ...

  3. MariaDB-5.5.33a 编译安装

    交代一下内核的信息 [root@localhost soft]# uname -r 2.6.32-71.el6.x86_64 创建mariadb用户组 [root@localhost mariadb- ...

  4. 判断文件是否存在(exist)

    set datedir=%date:~0,4%%date:~5,2%%date:~8,2%if exist d:\rollback\%datedir%\Server\ (rename d:\rollb ...

  5. 【转】C++中了类继承和调用父类的构造函数方法

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...

  6. 在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)

    http://quietmadman.blog.51cto.com/3269500/1359495 Beem http://beem-project.com/projects/beem/reposit ...

  7. css :after和:before

    :before是css中的一种伪元素,可用于在某个元素之前插入某些内容.:after是css中的一种伪元素,可用于在某个元素之后插入某些内容. 举例: 1.结合border写个对话框的样式. < ...

  8. Thinkphp单字母函数使用指南

    Thinkphp单字母函数使用指南A方法A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称')最简单的用法: $User = A('User'); 复制代码 ...

  9. ACM——简单排序

    简单选择排序 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:836            测试通过:259 描述 给定输入排序元素 ...

  10. Android开发之Adapter

    学习android时,对于我这种初学者来说,刚开始接触控件,发现有的控件需要adapter有些不需要,对此我感到不解.所以决定一探究竟. 其实android是一个完全遵从MVC模式的框架,activi ...