T组数据, 每次给你 n A B 三个数字。

f[1] = A  , f[2] = B  ,  f[n] = 2 * f[n-2] + f[n-1] + n^4

思路: 啊啊啊啊啊 矩阵快速幂 一定先要去构造单位矩阵

式子1 : f[i] = 2 * f[i - 2] + f[i - 1] + i ^ 4

式子2 : f[i + 1] = 2 * f[i - 1] + f[i] + (i + 1) ^ 4

把(i + 1)^4 用二项式定理展开  (i + 1) ^ 4 = i ^ 4 + 4 * i ^ 3 + 6 * i ^ 2 + 4 * i + 1

然后把式子1写成式子2的样子

式子3 :  f[i] = 2 * f[i - 2] + f[i - 1] + i ^ 4 + 0 * i ^ 3 + 0 * i ^ 2 + 0 * i + 0 *1

也就是说 f[i+1] 只的(i+1)的4次方 可以通过 i^3, i^2, i^1, 1 构造出来。

则 f[3] = 2 * f[1] + f[2] + 3^4   而3^4可以写成 (2 + 1)^4  =  1 * 2^4 + 4* i^3 + 6 * i^2 + 4 * i + 1

^ - ^ 然后xjb构造矩阵吧

上代码:

//
//  HDU5950 - Recursive sequence.cpp
//  数论
//
//  Created by Terry on 2018/9/29.
//  Copyright © 2018年 Terry. All rights reserved.
//#include <stdio.h>
typedef long long LL;
long long read(){long long x = 0, f = 1;char ch=getchar();while(ch < '0' || ch > '9'){if(ch=='-') f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}return x * f;
}
const int maxn = 7;
const long long mod = 2147493647;
struct Matrix{long long m[maxn][maxn];
}unit;
Matrix operator * (Matrix a, Matrix b){Matrix ret;LL x;int n = 7;for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){x = 0;for(int k = 0; k < n; ++k){x += ((LL)a.m[i][k] * b.m[k][j]) % mod;}ret.m[i][j] = (x) % mod;}}return ret;
}
void init_unit(){// 单位矩阵for(int i = 0; i < maxn; ++i){unit.m[i][i] = 1;}
}
Matrix pow_mat(Matrix a, LL n){Matrix ans = unit;while (n) {if(n & 1){ans = ans * a;}a = a * a;n >>= 1;}return ans;
}
int main(){// 初始化单位矩阵init_unit();LL T = read();while (T--) {LL n = read();Matrix ans, a;LL A = read();LL B = read();if(n == 1){printf("%lld\n", A);}else if(n == 2){printf("%lld\n", B);}else{ans.m[0][0] = B; ans.m[0][1] = A; ans.m[0][2] = 16; ans.m[0][3] = 8; ans.m[0][4] = 4; ans.m[0][5] = 2; ans.m[0][6] = 1;a.m[0][0]=1; a.m[0][1]=1; a.m[0][2]=0; a.m[0][3]=0; a.m[0][4]=0; a.m[0][5]=0; a.m[0][6]=0;a.m[1][0]=2; a.m[1][1]=0; a.m[1][2]=0; a.m[1][3]=0; a.m[1][4]=0; a.m[1][5]=0; a.m[1][6]=0;a.m[2][0]=1; a.m[2][1]=0; a.m[2][2]=1; a.m[2][3]=0; a.m[2][4]=0; a.m[2][5]=0; a.m[2][6]=0;a.m[3][0]=4; a.m[3][1]=0; a.m[3][2]=4; a.m[3][3]=1; a.m[3][4]=0; a.m[3][5]=0; a.m[3][6]=0;a.m[4][0]=6; a.m[4][1]=0; a.m[4][2]=6; a.m[4][3]=3; a.m[4][4]=1; a.m[4][5]=0; a.m[4][6]=0;a.m[5][0]=4; a.m[5][1]=0; a.m[5][2]=4; a.m[5][3]=3; a.m[5][4]=2; a.m[5][5]=1; a.m[5][6]=0;a.m[6][0]=1; a.m[6][1]=0; a.m[6][2]=1; a.m[6][3]=1; a.m[6][4]=1; a.m[6][5]=1; a.m[6][6]=1;a = pow_mat(a, n - 2);ans = ans * a;printf("%lld\n", ans.m[0][0] % mod);}}return 0;
}

HDU 5950 Recursive sequence相关推荐

  1. HDU 5950——Recursive sequence

    Recursive sequence 题意:给定起始的两个数a,b,求第n个数%mod 思路: 第一眼看出来是矩阵快速幂,不过当时没推出来(其实推了一半把自己给否定了) 正解是,根据二项式定理,对于f ...

  2. HDU 5950 Recursive sequence(矩阵快速幂)

    题目链接:Recursive sequence 题意:给出前两项和递推式,求第n项的值. 题解:递推式为:$F[i]=F[i-1]+2*f[i-2]+i^4$ 主要问题是$i^4$处理,容易想到用矩阵 ...

  3. Recursive sequence HDU - 5950

    Recursive sequence HDU - 5950 题意: 给你一个式子:f[n]=2f[n-2]+f[n-1]+n4 给你f[1]和f[2],给你一个n,求f[n] f[1],f[2],n& ...

  4. HDU 1005 Number Sequence

    [题目]                                                   Number Sequence Time Limit: 2000/1000 MS (Jav ...

  5. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  6. 数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem

    [SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式,考虑化成等比数列 xi+1+k=a(xi+k)=a⋅xi+b+t ...

  7. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

    矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...

  8. HDU 5400 Arithmetic Sequence

    HDU 5400 Arithmetic Sequence /** HDU 5400 Arithmetic Sequence 直接预处理求解就好了 预处理找出以a[i]结尾最长的subArr长度(满足条 ...

  9. HDU.1005 Number Sequence

    原题 HDU.1005 Number Sequence 分类 杂题 题意 给定一个数列{an}\left\{ a_n \right\}{an​}的前两项a1a_1a1​.a2a_2a2​,以及其递推公 ...

  10. HDU 1560 DNA sequence(DNA序列)

    HDU 1560 DNA sequence(DNA序列) Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K  ...

最新文章

  1. 没有提示_华为手机发出莫名的提示音,打开什么也没有?原来是它们在作怪
  2. feign调用多个服务_Spring Cloud多个微服务之间调用代码实例
  3. 配置phpmyadmin连接远程 MySQL数据库
  4. bzoj1089 [SCOI2003]严格n元树(dp+高精)
  5. 手写简版spring --6--应用上下文(BeanPostProcessor 和 BeanFactoryPostProcessor)
  6. 管道和过滤器模式----POSA模式助记格式
  7. jupyter 方框 汉字,jupyter画图中文显示乱码问题解决办法
  8. SQL Server 查询数据库中所有的表名及行数
  9. 分步骤演示如何使用Filter链拦截MyServlet的同一个请求
  10. asp.net 客户端回调功能的实现机制探讨(响应部分及可能的优化)
  11. 表-创建表-表的转换函数
  12. 小学计算机应用到英语课教案,人教版小学英语三年级上册unit one hello!文具单词教学信息技术应用成果(教学设计方案).doc...
  13. PHP第三方易宝支付对接
  14. Android 健康饮食软件详解
  15. 我的物联网大学【第五章】:沉默不会爆发,沉默一定会灭亡!
  16. 尚德机构第四季度营收5.688亿元 亏损大幅缩小
  17. 【Linux】进程通信
  18. sendmail服务器部署
  19. 力软:九年沉淀,从呱呱坠地到风华少
  20. 《C语言程序设计》第五版谭浩强课后答案 第九章《用户自己建立数据类型​》习题答案 (大一大二、考研、计算机二级必看)

热门文章

  1. 部署Hadoop2.0高性能集群
  2. git详细使用教程入门到精通(史上最全的git教程)
  3. es5创建对象与继承
  4. C#中字符与字符串(转)
  5. Dijkstra 算法初探
  6. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
  7. Android优美代码赏析:Snake游戏分析
  8. sqli-labs(1)
  9. 一分钟搭建Spring Boot
  10. 构建Web内容的技术