思路:

之前那篇完全没想清楚,给删了,下午一上班突然想明白了。

讲一下这道题的大概思路,应该就明白矩阵快速幂是怎么回事了。

我们首先可以推导出

学过矩阵的都应该看得懂,我们把它简写成T*A(n-1)=A(n),是不是有点像等比?然后我们得到T^(n-1)*A(1)=A(n),所以我们可以通过矩阵快速幂快速计算左边的T^n-1这个式子,最后再和A1相乘,那么第一个数字就是答案了。

代码:

  1. #include<set>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. const int maxn = 2;
  6. const int MOD = 1000000000+7;
  7. const int INF = 0x3f3f3f3f;
  8. using namespace std;
  9. struct Mat{
  10. int s[maxn][maxn];
  11. void init(){
  12. for(int i = 0;i < maxn;i++)
  13. for(int j = 0;j < maxn;j++)
  14. s[i][j] = 0;
  15. }
  16. };
  17. Mat mul(Mat a,Mat b){
  18. Mat t;
  19. t.init();
  20. for(int i = 0;i < maxn;i++){
  21. for(int j = 0;j < maxn;j++){
  22. for(int k = 0;k < maxn;k++){
  23. t.s[i][j] = (t.s[i][j] + a.s[i][k]*b.s[k][j])%MOD;
  24. }
  25. }
  26. }
  27. return t;
  28. }
  29. Mat pow_mat(Mat p,int n){
  30. Mat ret;
  31. ret.init();
  32. ret.s[0][0] = ret.s[1][1] = 1;
  33. while(n){
  34. if(n & 1) ret = mul(ret,p);
  35. p = mul(p,p);
  36. n >>= 1;
  37. }
  38. return ret;
  39. }
  40. int main(){
  41. int x,y,n;
  42. Mat a;
  43. a.s[0][0] = 1;
  44. a.s[0][1] = -1;
  45. a.s[1][0] = 1;
  46. a.s[1][1] = 0;
  47. scanf("%d%d%d",&x,&y,&n);
  48. if(n == 1){
  49. printf("%d\n",(x%MOD + MOD)%MOD);
  50. }
  51. else if(n == 2){
  52. printf("%d\n",(y%MOD + MOD)%MOD);
  53. }
  54. else{
  55. a = pow_mat(a,n - 2);
  56. printf("%d\n",((y*a.s[0][0] + x*a.s[0][1])%MOD +MOD)%MOD);
  57. }
  58. return 0;
  59. }

CodeForces 450B Jzzhu and Sequences(矩阵快速幂)题解的更多相关文章

  1. Codeforces 450B div.2 Jzzhu and Sequences 矩阵快速幂or规律

    Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, ple ...

  2. codeforces 450B B. Jzzhu and Sequences(矩阵快速幂)

    题目链接: B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input ...

  3. Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)

    题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. /* | 1, -1 | | fn | | 1, 0 | | f ...

  4. CodeForces 450B Jzzhu and Sequences (矩阵优化)

    CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...

  5. Educational Codeforces Round 60 D dp + 矩阵快速幂

    https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...

  6. Codeforces 1067D - Computer Game(矩阵快速幂+斜率优化)

    Codeforces 题面传送门 & 洛谷题面传送门 好题. 首先显然我们如果在某一次游戏中升级,那么在接下来的游戏中我们一定会一直打 \(b_jp_j\) 最大的游戏 \(j\),因为这样得 ...

  7. codeforces 678D Iterated Linear Function 矩阵快速幂

    矩阵快速幂的题要多做 由题可得 g[n]=A*g[n-1]+B 所以构造矩阵  { g[n] }    =  {A   B}  * { g[n-1]} {   1   }         {0   1 ...

  8. CodeForces 450B Jzzhu and Sequences

    矩阵快速幂. 首先得到公式 然后构造矩阵,用矩阵加速 取模函数需要自己写一下,是数论中的取模. #include<cstdio> #include<cstring> #incl ...

  9. Educational Codeforces Round 14E. Xor-sequences(矩阵快速幂)

    传送门 题意 给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足\(x_i与x_{i+1}\)异或的二进制表示中1的个数是3的倍数.问长度为k的满足条件的序列有多少种 ...

随机推荐

  1. 如何使用腾讯云开发一款 AR 应用介绍

    版权声明:本文由张亚舒原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/117 来源:腾云阁 https://www.qclo ...

  2. JSTL中&#60;c:set&#62;标签的用法

    <c:set>标签有两种不同的属性设置:var和target. var“版本”用于设置作用域属性,target“版本”用于设置bean属性或Map值. 这两个版本都有两种形式:有标签体和没 ...

  3. Spring AOP依赖包

    Spring4和2.5发生了很大的变化,原来的spring2.5很多倚赖的jar包都是随着spring一起发布的,现在spring4已 经不再发布倚赖包,需要你自己去导入 1.org.springfr ...

  4. JS将阿拉伯数字转为钱

     function DX(n) {         if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))             return "数据非法" ...

  5. ZOJ 3210 A Stack or A Queue?

    A Stack or A Queue? Time Limit: 1 Second      Memory Limit: 32768 KB Do you know stack and queue? Th ...

  6. Tomcat 系统架构

    https://www.ibm.com/developerworks/cn/java/j-lo-tomcat1/index.html 2010 年 5 月 20 日发布 本文以 Tomcat 5 为基 ...

  7. CEO 是一家创业公司的天花板

    大家说是不是呢?一秒钟内看到本质的人,和半辈子也看不清一件事本质的人,自然是不一样的命运.

  8. 【Cocos2dx 3.x Lua】TileMap使用

    1.编辑TileMap地图资源 2.Cocos2dx 3.x Lua中使用TileMap   Link: http://codepad.org/P0nFP1Dx  local TileMap=clas ...

  9. python3 os.walk()使用

    os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. 在Unix,Windows中有效. os.walk(top[, topdown=True[, onerror=Non ...

  10. 多线程Java面试题总结

    57.Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?答:sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指 ...