HDU3306—Another kind of Fibonacci
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3306
题目意思:一个斐波那契数列的变式,本来是A[n]=A[n-1]+A[n-2],现在变成A[n]=N*A[n-1]+Y*A[n-2]。一个很简单的矩阵快速幂。 S(N) = A(0)2 +A(1)2+……+A(n)2对系数矩阵稍微变化一下就可以了。唯一需要注意的是N和Y可能很大,所以需要先mod一下。
思路:首先先求A[n]^2,因为A[n]=N*A[n-1]+Y*A[n-2],所以A[n]^2=(N*A[n-1])^2+(Y*A[n-2])^2=N^2*A[n-1]^2+Y^2*A[n-2]^2+2NY*A[n-1]*A[n-2]。然后我们可以构造矩阵,求前n项和。
|1 0 0 0|
|x*x x*x 1 x|
A= |y*y y*y 0 0|
|2xy 2xy 0 y|
以上为系数矩阵
代码:
//Author: xiaowuga
#include <bits/stdc++.h>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define size 4
#define MOD 10007
using namespace std;
typedef long long ll;
struct Matrix{
ll mat[][];
void clear(){
memset(mat,,sizeof(mat));
}
Matrix operator * (const Matrix & m) const{
Matrix tmp;
for(int i=;i<size;i++)
for(int j=;j<size;j++){
tmp.mat[i][j]=;
for(int k=;k<size;k++){
tmp.mat[i][j]+=mat[i][k]*m.mat[k][j]%MOD;
tmp.mat[i][j]%=MOD;
}
}
return tmp;
}
};
Matrix POW(Matrix m,ll k){
Matrix ans;
ans.clear();
for(int i=;i<size;i++) ans.mat[i][i]=;
while(k){
if(k&) ans=ans*m;
k/=;
m=m*m;
}
return ans;
}
int main() {
ios::sync_with_stdio(false);cin.tie();
ll n,x,y;
while(cin>>n>>x>>y){
Matrix m;
m.clear();
m.mat[][]=m.mat[][]=(x%MOD)*(x%MOD)%MOD;
m.mat[][]=m.mat[][]=(y%MOD)*(y%MOD)%MOD;
m.mat[][]=m.mat[][]=(*x%MOD)*(y%MOD)%MOD;
m.mat[][]=m.mat[][]=;
m.mat[][]=x%MOD;m.mat[][]=y%MOD;
ll f[]={,,,};
Matrix ans=POW(m,n-);
ll sum=;
for(int i=;i<;i++){
sum=(sum+ans.mat[][i]*f[i])%MOD;
}
cout<<sum<<endl;
}
return ;
}
HDU3306—Another kind of Fibonacci的更多相关文章
- hdu3306 Another kind of Fibonacci【矩阵快速幂】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://acm.hdu.edu.cn/showproblem. ...
- HDU3306 Another kind of Fibonacci 矩阵
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3306 题意概括 A0=1,A1=1,AN=X*AN-1+Y*AN-2(N>=2).求SN,SN ...
- HDU3306 Another kind of Fibonacci
本篇题解用于作者本人对于矩阵乘法的印象加深,也欢迎大家的阅读. 题目大意 众所周知,斐波那契数列为 \(f(0)=1\) , \(f(1)=1\) ,\(f(n)=f(n-1)+f(n-2)~(n&g ...
- Another kind of Fibonacci(hdu3306)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- hdu3306:Another kind of Fibonacci
A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2. 这个矩阵有点毒.. #include&l ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- #26 fibonacci seqs
Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...
- 关于java的递归写法,经典的Fibonacci数的问题
经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...
- 斐波拉契数列(Fibonacci) 的python实现方式
第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...
随机推荐
- JAVA多线程之synchronized和volatile实例讲解
在多线程中,提到线程安全.线程同步,我们经常会想到两个关键字:volatile和synchronized,那么这两者有什么区别呢? 1. volatile修饰的变量具有可见性 volatile是变量修 ...
- ov5640 i2c通信异常问题
1 异常场景如下描述 之前的测试场景: 将插在排针上的杜邦线向上拔一点,留出空间挂示波器的探针. 这种方式会导致i2c只发送一组8bit的数据,而另外两组没有发送成功.如上图所示. 因此,之前出现没有 ...
- sphider 丁廷臣简体中文完美汉化版带蜘蛛搜索引擎程序 v1.3.4
sphider 丁廷臣简体中文完美汉化版带蜘蛛搜索引擎程序 v1.3.4是最官方的新版,免费开源,用官方最新发布原版汉化.未更改任何内核文件. Sphider 是一个完美的带有蜘蛛的搜索引擎程序. S ...
- SAP ECC6安装系列二:安装前的准备工作
原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 安装 Java 1,安装 Java, ...
- hdu1078(记忆化搜索)
题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物 这道题目,值得我记住它,re了n次,以前写搜索没有注意的一个小地方,导致re这么多次的 ac代码: #inc ...
- RP2837 OUT1-OUT2 对应关系 2路DO
RP2837 OUT1-OUT2 对应关系: OUT1 AD2 PD22 继电器1 OUT2 AD4 PD24 继电器2 root@sama5d3-linux:~ echo 11 ...
- Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
简单介绍 Encrypted Shuffle capability (加密洗牌功能? )同意用HTTPS 和 可选的client验证 (也称作双向的 HTTPS, 或有client证书的 HTTPS) ...
- cmake 安装 mysql5.5 版本
1.安装确保以下系统相关库文件 gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libmcrypt* libtool*(libtoo ...
- javascript 实现java中的Map
javascript实现java中的Map,代码是在国外的一个网站上看到的(http://stackoverflow.com/questions/368280/javascript-hashmap-e ...
- 安卓解析json
重点是开启网络权限 难点是调用函数 开启网络权限 </application> <uses-permission android:name="android.permiss ...