矩阵快速幂 F[n]=F[n-2]*2+F[n-1]+i^4 hdu5950
这道题的难点就是构造出这个矩阵
假如是这样的一个式子 F[n]=F[n-2]*2+F[n-1],那就很简单
但是,多了个i^4,这就很难办了。
所以,我们要着重处理的就是这一部分
那么 (n+1)^4 = n^4 + 4n^3 + 6n^2 + 4n + 1
ans.a[][]=bb%mod;///f(i-1)
ans.a[][]=aa%mod;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
假如目前我们处理的基础矩阵为这个样子。
那么我们就需要以下这样一个与他相乘的矩阵
1 2 1 0 0 0 0 f(2)
1 0 0 0 0 0 0 f(1)
0 0 1 4 6 4 1 81
0 0 0 1 3 3 1 27
0 0 0 0 1 2 1 9
0 0 0 0 0 1 1 3
0 0 0 0 0 0 1 1
代码如下:
#include<cstdio>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
typedef long long ll;
const ll mod=;
struct node
{
ll a[][];
}ans,A,B;
node mat(node x,node y)
{
node c;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
c.a[i][j]=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
c.a[i][j]=(c.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;
return c;
}
void init()
{
A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;
A.a[][]=;A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;
A.a[][]=,A.a[][]=;A.a[][]=;A.a[][]=;A.a[][]=;A.a[][]=;A.a[][]=;
A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;A.a[][]=;A.a[][]=;A.a[][]=;
A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;A.a[][]=;
A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;A.a[][]=;
A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=,A.a[][]=;A.a[][]=;
}
void quick_mod(ll n)
{
memset(ans.a,,sizeof(ans.a));
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(i==j) B.a[i][j]=;
else B.a[i][j]=;
init();
while(n){
if(n&) B=mat(B,A);
A=mat(A,A);
n>>=;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
ll n,aa,bb;
scanf("%lld%lld%lld",&n,&aa,&bb);
if(n==) printf("%lld\n",aa);
else if(n==) printf("%lld\n",bb);
else{
quick_mod(n-);
ans.a[][]=bb%mod;///f(i-1)
ans.a[][]=aa%mod;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
ans.a[][]=;
ans=mat(B,ans);
printf("%lld\n",ans.a[][]);
}
}
return ;
}
矩阵快速幂 F[n]=F[n-2]*2+F[n-1]+i^4 hdu5950的更多相关文章
- [HDOJ2604]Queuing(递推,矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 递推式是百度的,主要是练习一下如何使用矩阵快速幂优化. 递推式:f(n)=f(n-1)+f(n- ...
- poj 3744 Scout (Another) YYF I - 概率与期望 - 动态规划 - 矩阵快速幂
(Another) YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
- 【xsy1237】 字符转换 矩阵快速幂
题目大意:给你两个长度都为n,字符集为{a,b,c}的字符串S和T. 对于字符串S的任意一个字符,我们可以用cost[0]的代价,把字符a变成字符b.用cost[1]的代价,把字符b变成c,用cost ...
- hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
Mathematician QSC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- BZOJ2326 [HNOI2011]数学作业(分块矩阵快速幂)
题意: 定义函数Concatenate (1 ..N)是将所有正整数 1, 2, …, N 顺序连接起来得到的数,如concatenate(1..5)是12345,求concatenate(1...n ...
- 斐波那契数列第N项f(N)[矩阵快速幂]
矩阵快速幂 定义矩阵A(m*n),B(p*q),A*B有意义当且仅当n=p.即A的列数等于B的行数. 且C=A*B,C(m*q). 例如: 进入正题,由于现在全国卷高考不考矩阵,也没多大了解.因为遇到 ...
- Codeforces Round #536 (Div. 2) F 矩阵快速幂 + bsgs(新坑) + exgcd(新坑) + 欧拉降幂
https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k} ...
- HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 数学--数论--HDU 2802 F(N) 公式推导或矩阵快速幂
Giving the N, can you tell me the answer of F(N)? Input Each test case contains a single integer N(1 ...
- 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)
题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...
随机推荐
- 安卓平台SQLite数据库基础操作总结
最近学了一些安卓开发,在这里分享一下SQLite数据库的使用相关部分,我使用的工具为Android Studio,后台语言为java: 首先,需要创建一个数据库辅助类DataBaseHelper,用于 ...
- BZOJ 4238: 电压 DFS树
分类讨论一下奇环和偶环的情况. code: #include <bits/stdc++.h> #define N 200006 #define setIO(s) freopen(s&quo ...
- 控制input中只能输入固定格式内容
onkeyup 事件会在键盘按键被松开时发生,onafterpaste 是粘贴触发,没有这个事件用onblur吧,失去焦点时发生输入完,点其他地方就会执行. <html lang="e ...
- windows10 node-gyp安装
本机环境:win10,已安装vs2017,Node版本 10.13.0 1.安装node-gyp npm install -g node-gyp 2.安装完毕之后node-gyp list看一下 no ...
- Pikachu-php反序列化
在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数. 序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象 ...
- java - 各类OOM分析
StackOverflowError 比较常见的问题,虚拟机栈中栈帧过多超出栈容量,常见发生在递归方法深度过深. OutOfMemoryError java heap space java堆内存不足以 ...
- IntelliJ IDEA Ultimate 6.2 版本免费试用期过期后如何破解
今天早上一打开IntelliJ IDEA时弹出“InteliJ IDEA License Activation”界面,需要激活新的license才可以使用.下面直接使用Activation code进 ...
- ubuntu set up 4 - 设置和软件
1. Top Bar显示日期 https://askubuntu.com/questions/966576/customizing-tray-taskbar-date-display-in-ubunt ...
- HDU 4544 湫湫系列故事——消灭兔子 (优先队列)
湫湫减肥 越减越肥! 最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子 ...
- springboot整合websocket实现客户端与服务端通信
定义 WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议.此WebSocket API可在用户的浏览器和服务器之间进行双向通信.用户可以向服务器发送消息并接收事件驱 ...