矩阵快速幂模版

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <cstdio>
  6. #include <cmath>
  7. #define ll long long
  8. using namespace std;
  9. const int MOD = (int) 1e9+7;
  10. struct Matrix {
  11. static const int MAXN = 3;
  12. ll num[MAXN][MAXN], col, row;
  13. void clear() {
  14. memset(num, 0, sizeof(num));
  15. col = row = 0;
  16. }
  17. void unit() {
  18. col = row = 3;
  19. for(int i = 0; i < MAXN; i++) num[i][i] = 1;
  20. }
  21. void build(){
  22. col = row = 3;
  23. num[1][0] = num[2][1] = num[0][2] = num[2][2] = 1;
  24. }
  25. };
  26. Matrix operator * (const Matrix & a, const Matrix & b){
  27. Matrix res;
  28. res.clear();
  29. for(int i = 0; i < 3; i++) {
  30. for(int j = 0; j < 3; j++) {
  31. for(int k = 0; k < 3; k++) {
  32. (res.num[i][j] += a.num[i][k] * b.num[k][j]) %= MOD;
  33. }
  34. }
  35. }
  36. return res;
  37. }
  38. Matrix operator ^ (Matrix a, ll k) {
  39. Matrix res;
  40. res.clear(); res.unit();
  41. while(k) {
  42. if(k & 1ll) res = res * a;
  43. a = a * a;
  44. k >>= 1;
  45. }
  46. return res;
  47. }
  48. ll T, n;
  49. int main() {
  50. cin>>T;
  51. while(T--) {
  52. cin>>n;
  53. if(n <= 3) {cout<<1<<endl;continue;}
  54. n -= 3;
  55. Matrix a;
  56. a.clear(); a.build();
  57. a = a ^ n;
  58. ll ans = 0;
  59. for(int i = 0; i < 3; i++) ans += a.num[i][2];
  60. ans %= MOD;
  61. cout<<ans<<endl;
  62. }
  63. return 0;
  64. }

洛谷 [P1939] 矩阵加速数列的更多相关文章

  1. 洛谷 P1939 矩阵加速(数列)

    题意简述 \(a[1]=a[2]=a[3]=1\) \(a[x]=a[x−3]+a[x−1](x>3)\) 求a数列的第n项对1000000007取余的值. 题解思路 矩阵加速 设\[ F=\b ...

  2. 洛谷 P1939 【模板】矩阵加速(数列) 解题报告

    P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值 ...

  3. [洛谷P1939]【模板】矩阵加速(数列)

    题目大意:给你一个数列a,规定$a[1]=a[2]=a[3]=1$,$a[i]=a[i-1]+a[i-3](i>3)$求$a[n]\ mod\ 10^9+7$的值. 解题思路:这题看似是很简单的 ...

  4. 【洛谷P1939】 矩阵加速模板

    https://www.luogu.org/problemnew/show/P1939 矩阵快速幂 斐波那契数列 首先看一下斐波那契数列的矩阵快速幂求法: 有一个矩阵1*2的矩阵|f[n-2],f[n ...

  5. 洛谷.2042.[NOI2005]维护数列(Splay)

    题目链接 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 /* 插入一段数:将这些数先单独建一棵 ...

  6. 洛谷 P1939 【模板】矩阵加速(数列)

    题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一 ...

  7. 洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂

    思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1)   ] [a(n-1) ] =    ...

  8. 洛谷P1473 零的数列 Zero Sum

    P1473 零的数列 Zero Sum 134通过 170提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 路过的一定帮我看错了我死了- 题目描述 请考虑 ...

  9. 洛谷 P1005 矩阵取数游戏

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

随机推荐

  1. solr scheme配置简介

    solr 字段配置,和数据库数据索引配置 配置solr字段. schema.xml 文件里配置 先讲解一下,里面的一些字段 1. <types> ... </types> 表示 ...

  2. 如何在vue项目中使用sass(scss)

    1.用npm/cnpm/yarn安装sass的依赖包 npm install --save-dev sass-loader npm install --save-dev node-sass 或者: y ...

  3. nuxt 初接触

    对于nuxt服务端渲染让人动心的是不会再想vue一样去定义无数的路由了这一点是挺爽的!!! 先直接晒张图 在api这块增加了一个fetch方法   它会在组件每次加载前被调用(即在服务端或切换至目标路 ...

  4. 多进程Queue

    进程间通讯 不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用以下方法: Queues 使用方法跟threading里的queue差不多 from multiprocessing impo ...

  5. 优化SQL语句的方法

    首先,对于where语句的注意事项: 1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where nu ...

  6. js获取当前时间的前一天/后一天

    Date curDate = new Date();var preDate = new Date(curDate.getTime() - 24*60*60*1000); //前一天var nextDa ...

  7. NYOJ-06-喷水装置(一)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=6 喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现有 ...

  8. windows10 下安装、配置、启动mysql

    下载mysql 可以自行去百度 或者 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压mysql-5.7.26-winx64.zi ...

  9. Bootstrap历练实例:大的按钮

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  10. java mongodb 增删改查 工具类

    package com.jttx.demo;   import com.mongodb.*; import com.mongodb.util.JSON;   import java.net.Unkno ...