杭电oj3306:Another kind of Fibonacci(矩阵快速幂)
Another kind of Fibonacci
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description
As we all known , the Fibonacci series : F(0) = 1, F(1) = 1, F(N) = F(N - 1) + F(N - 2) (N >= 2).Now we define another kind of Fibonacci : A(0) = 1 , A(1) = 1 , A(N) = X * A(N - 1) + Y * A(N - 2) (N >= 2).And we want to Calculate S(N) , S(N) = A(0)^2 +A(1)2+……+A(n)2.
Input
There are several test cases.
Each test case will contain three integers , N, X , Y .
N : 2<= N <= 2^31 – 1
X : 2<= X <= 2^31 – 1
Y : 2<= Y <= 2^31 – 1
Output
For each test case , output the answer of S(n).If the answer is too big , divide it by 10007 and give me the reminder.
Sample Input
2 1 1
3 2 3
Sample Output
6
196
思路见下图:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 5;
typedef long long LL;
struct Matrix{
int matrix[maxn][maxn];
}ori, ans;
int n = 4, N, X, Y, m = 10007;
void init()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ori.matrix[i][j] = ans.matrix[i][j] = 0;
ori.matrix[0][0] = ori.matrix[2][1] = 1;
ori.matrix[0][1] = ori.matrix[1][1] = X * X % m;
ori.matrix[0][2] = ori.matrix[1][2] = Y * Y % m;
ori.matrix[0][3] = ori.matrix[1][3] = ((2 * X) % m) * Y % m;
ori.matrix[3][1] = X;
ori.matrix[3][3] = Y;
ans.matrix[0][0] = 2;
ans.matrix[1][0] = ans.matrix[2][0] = ans.matrix[3][0] = 1;
}
Matrix multiply(Matrix a, Matrix b)
{
Matrix temp;
memset(temp.matrix, 0, sizeof(temp.matrix));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
temp.matrix[i][j] = (temp.matrix[i][j] + ((a.matrix[i][k] * b.matrix[k][j]) % m)) % m;
return temp;
}
//矩阵的b次幂
Matrix binaryPow(int b)
{
Matrix temp;
memset(temp.matrix, 0, sizeof(temp.matrix));
for(int i=0;i<n;i++)
temp.matrix[i][i] = 1;
while(b > 0)
{
if(b & 1)
temp = multiply(ori, temp);
ori = multiply(ori, ori);
b >>= 1;
}
return temp;
}
int main()
{
//freopen("in.txt","r", stdin);
while(cin>>N>>X>>Y)
{
X %= m;
Y %= m;
init();
Matrix temp = binaryPow(N - 1);
ans = multiply(temp, ans);
cout<<ans.matrix[0][0]<<endl;
}
return 0;
}
杭电oj3306:Another kind of Fibonacci(矩阵快速幂)的更多相关文章
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- HDU 1588 Gauss Fibonacci(矩阵快速幂)
Gauss Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- UVA - 10229 Modular Fibonacci 矩阵快速幂
Modular Fibonacci The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 3 ...
- POJ 3070 Fibonacci 矩阵快速幂模板
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18607 Accepted: 12920 Descr ...
- poj3070 Fibonacci 矩阵快速幂
学了线代之后 终于明白了矩阵的乘法.. 于是 第一道矩阵快速幂.. 实在是太水了... 这差不多是个模板了 #include <cstdlib> #include <cstring& ...
- $loj$10222 佳佳的$Fibonacci$ 矩阵快速幂
正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\s ...
- POJ 3070 Fibonacci矩阵快速幂 --斐波那契
题意: 求出斐波那契数列的第n项的后四位数字 思路:f[n]=f[n-1]+f[n-2]递推可得二阶行列式,求第n项则是这个矩阵的n次幂,所以有矩阵快速幂模板,二阶行列式相乘, sum[ i ] [ ...
- POJ3070:Fibonacci(矩阵快速幂模板题)
http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...
- hdu 3306 Another kind of Fibonacci 矩阵快速幂
参考了某大佬的 我们可以根据(s[n-2], a[n-1]^2, a[n-1]*a[n-2], a[n-2]^2) * A = (s[n-1], a[n]^2, a[n]*a[n-1], a[n-1] ...
随机推荐
- ffmpeg使用C语言sdk实现抽取视频中的视频数据
主要使用函数 特征码:Start code 解码的一些视频参数,分辨率和帧率:SPS/PPS ffmpeg获取SPS/PPS:codec->extradata 实例 #include <s ...
- PHP开发者该知道的5个Composer小技巧
Composer 是新一代的PHP依赖管理工具.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单 co ...
- C++11并发编程2------线程管理
本节内容: 启动一个线程 每个程序都至少会有一个线程,main函数是执行入口,我们称之为主线程,其余子线程有各自的入口函数,主线程和子线程同时运行.子线程在std::thread对象创建时启动. 1. ...
- Write-up-Toppo
关于 下载地址:点我 哔哩哔哩:哔哩哔哩 信息收集 vmnet8网卡,IP:192.168.131.144,开放web,ssh服务 ➜ ~ ip a show dev vmnet8 5: vmnet8 ...
- 服务端OLEVARIANT数据之后传输
将OLEVARIANT数据流化,然后对流进行压缩,还原成OLEVARIANT以后再发送. procedure StreamToVariant(Stream: TStream; var V: OLEVa ...
- shell脚本中执行sql脚本(mysql为例)
1.sql脚本(t.sql) insert into test.t value ("LH",88); 2.shell脚本(a.sh 为方便说明,a.sh与t.sql在同一目 ...
- Maven项目- "null" 的java.lang.reflect.InvocationTargetException 解决方法
异常显示: 解决方法:
- Python—处理Excel表格
一.使用xlrd和xlwt这两个库来处理excel,即xlrd是读excel的库,xlwt是写excel的库 1.使用 xlrd 读取Excel数据 # -*- coding:utf-8 -*- im ...
- Django(十六)基于模板的登录案例:登录装饰器、csrf攻击方式及防护、ajax的Post 的csrf开启写法、生成验证码、加验证码登录、反向解析+传参
一.csrf攻击 1.1 csrf攻击(跨站请求伪造) [csrf攻击即]:通过第3方网站,伪造请求(前提条件是你已经登录正常网站,并保存了session或cookie登录信息且没有退出),第三方网站 ...
- AC自动机 (模板)
AC自动机是用来干什么的: AC自动机是用来解决多模匹配问题,例如有单词s1,s2,s3,s4,s5,s6,问:在文本串ss中有几个单词出现过,类似. AC自动机实现这个功能需要三个部分: 1.将所有 ...