http://acm.hdu.edu.cn/showproblem.php?pid=6470

题意

\(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n]

题解

  • 每一项只能由上一项经线性变换转移过来

代码

  1. #include<bits/stdc++.h>
  2. #define P 123456789
  3. #define ll long long
  4. using namespace std;
  5. struct N{
  6. ll a[10][10];
  7. };
  8. N mul(N x,N y){
  9. N z;
  10. memset(z.a,0,sizeof(z.a));
  11. for(int i=0;i<6;i++){
  12. for(int j=0;j<6;j++){
  13. for(int k=0;k<6;k++){
  14. z.a[i][j]+=(x.a[i][k]*y.a[k][j])%P;
  15. z.a[i][j]%=P;
  16. }
  17. }
  18. }
  19. return z;
  20. }
  21. N pw(N y,ll x){
  22. N z;memset(z.a,0,sizeof(z.a));
  23. for(int i=0;i<6;i++)z.a[i][i]=1;
  24. while(x){
  25. if(x&1)z=mul(z,y);
  26. y=mul(y,y);
  27. x>>=1;
  28. }
  29. return z;
  30. }
  31. int T;
  32. ll n,ans,a[]={2,1,8,4,2,1};
  33. int b[][6]={{1,1,0,0,0,0},
  34. {2,0,0,0,0,0},
  35. {1,0,1,0,0,0},
  36. {3,0,3,1,0,0},
  37. {3,0,3,2,1,0},
  38. {1,0,1,1,1,1}};
  39. int main(){
  40. cin>>T;
  41. while(T--){
  42. ans=0;
  43. cin>>n;
  44. if(n==1)printf("1\n");
  45. else if(n==2)printf("2\n");
  46. else{
  47. N y;memset(y.a,0,sizeof(y.a));
  48. y.a[0][0]=y.a[0][1]=1;
  49. y.a[1][0]=2;
  50. y.a[2][0]=y.a[2][2]=1;
  51. y.a[3][0]=y.a[3][2]=3;y.a[3][3]=1;
  52. y.a[4][0]=y.a[4][2]=3;y.a[4][3]=2;y.a[4][4]=1;
  53. y.a[5][0]=y.a[5][2]=y.a[5][3]=y.a[5][4]=y.a[5][5]=1;
  54. y=pw(y,n-2);
  55. for(int i=0;i<6;i++){
  56. ans+=a[i]*y.a[i][0]%P;
  57. ans%=P;
  58. }
  59. printf("%lld\n",ans);
  60. }
  61. }
  62. }

hdu6470 矩阵快速幂+构造矩阵的更多相关文章

  1. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  2. 51nod 1113 矩阵快速幂( 矩阵快速幂经典模板 )

    1113 矩阵快速幂 链接:传送门 思路:经典矩阵快速幂,模板题,经典矩阵快速幂模板. /******************************************************* ...

  3. Construct a Matrix (矩阵快速幂+构造)

    There is a set of matrixes that are constructed subject to the following constraints: 1. The matrix ...

  4. HDU 1588 矩阵快速幂 嵌套矩阵

    这个题目搞了我差不多一个下午,之前自己推出一个公式,即 f[n+k]=k*f[n]+f[n-1]结果发现根本不能用,无法降低复杂度. 后来又个博客的做法相当叼,就按他的做法来了 即 最终求得是 S(n ...

  5. LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton

    将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...

  6. 题解——洛谷P3390 【模板】矩阵快速幂(矩阵乘法)

    模板题 留个档 #include <cstdio> #include <algorithm> #include <cstring> #define int long ...

  7. hdu3483之二项式展开+矩阵快速幂

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

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

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

  9. hdu 1597(矩阵快速幂)

    1597: 薛XX后代的IQ Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 228  Solved: 55[Submit][Status][Web Bo ...

随机推荐

  1. 2019 SDN上机第6次作业

    2019 SDN上机第6次作业 1.实验拓扑 (1)实验拓扑 (2)使用Python脚本完成拓扑搭建 from mininet.topo import Topo from mininet.net im ...

  2. 如何使用PHP的生成器yield处理大量数据业务

    官方解释yield yield生成器是php5.5之后出现的,官方文档这样解释:yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大 ...

  3. 【Linux】文本处理工具介绍

    文本处理工具介绍 grep.sed和awk都是文本处理工具,各自都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的.相比较而言,sed和awk功能更强大,且已独立成一种语言来介绍. grep: ...

  4. Anaconda安装第三方库与pip和conda 添加国内源

    Anaconda安装第三方库 PIP使用命令 Anaconda命令 pip和conda 添加国内源 1:PIP相关命令 卸载 pip uninstall XXX 1.升级pip python -m p ...

  5. Java Serializable:明明就一个空的接口嘛

    对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了.我不愿意做更深入的研究,因为会用就行了嘛. 但随着时间的推移,见到 Serial ...

  6. tinker接入

    对于热修复无非就是两大类,一类是tencent代表的classloader模式的,另一类是阿里系代表的底层方面替换. 下面以本人的经验介绍下微信的tinker接入: 命令行接入方式: gradle接入 ...

  7. 黄聪:PHP转换网址相对路径到绝对路径的一种方法

    相信很多程序(尤其是采集类的程序)都会有需要把网址的相对路径转换成绝对路径的需要,例如采集到某页面的HTML代码中包含资源文件经常会看到这样的文件名: <link rel="style ...

  8. java高并发系列 - 第2天:并发级别

    由于临界区的存在,多线程之间的并发必须受到控制.根据控制并发的策略,我们可以把并发的级别分为阻塞.无饥饿.无障碍.无锁.无等待几种. 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继 ...

  9. python中自带的三个装饰器

    说到装饰器,就不得不说python自带的三个装饰器: 1.@property 将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @propert ...

  10. Unity API学习笔记(1)

    首先创建测试项目: 这里我选择了2D,其实都可以,之后可以在项目中修改. 修改方法: 进入正题. 首先看一下官方提供的>手册和>脚本API文档. 创建C#脚本文件并打开: 默认的脚本文件为 ...