首页 > 其他分享 >hdu:Another kind of Fibonacci(含多种关系的矩阵快速幂)

hdu:Another kind of Fibonacci(含多种关系的矩阵快速幂)

时间:2023-01-15 16:45:23浏览次数:47  
标签:hdu matrix 矩阵 kind Fibonacci ull test

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.

 

输入样例

2 1 1 
3 2 3 

输出样例

6
196

本题关键是写系数矩阵,将A(N)替换后与A(N-1)*A(N-2)挂钩
附ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=4,mod=10007;
typedef unsigned long long ull;
ull x,y;
struct matrix{
    ull ma[N][N];
};
matrix muti(matrix a,matrix b)
{
    matrix c;
    for(int i=0;i<N;++i)
      for(int j=0;j<N;++j)
      c.ma[i][j]=0;
    for(int i=0;i<N;++i)
      for(int j=0;j<N;++j)
       for(int z=0;z<N;++z)
    {
        c.ma[i][j]+=(a.ma[i][z]%mod*(b.ma[z][j]%mod))%mod;
        c.ma[i][j]%=mod;
    }
    return c;
}
matrix pow_ma(matrix a,int k)
{
    if(k==1) return a;
    matrix s;
    s=pow_ma(muti(a,a),k/2);
    if(k%2) s=muti(s,a);
    return s;
}
int main()
{
    int n;
    int t[N]={2,1,1,1};
    while(scanf("%d%d%d",&n,&x,&y)==3)
    {
        //unit每次输入都要重新定义,不能定义成全局
        ull unit[N][N]={{1,x*x,2*x*y,y*y},{0,x*x,2*x*y,y*y},{0,x,y,0},{0,1,0,0}};
        //x*x直接在数组内就爆了int需要改变其数据类型
        matrix ans;
        for(int i=0;i<N;++i)
          for(int j=0;j<N;++j)
            ans.ma[i][j]=unit[i][j];
        ans=pow_ma(ans,n-1);
        ull sum=0;
        for(int i=0;i<N;++i)
        {sum+=(ans.ma[0][i]%mod*(t[i]%mod))%mod;
        sum%=mod;
        }
        printf("%llu\n",sum%mod);
    }
}

 

标签:hdu,matrix,矩阵,kind,Fibonacci,ull,test
From: https://www.cnblogs.com/ruoye123456/p/17053695.html

相关文章

  • hdu:Sum of Tribonacci Numbers(带前缀和矩阵快速幂)
    ProblemDescriptionEverybodyknowsFibonaccinumbers,nowwearetalkingabouttheTribonaccinumbers:T[0]=T[1]=T[2]=1;T[n]=T[n-1]+T[n-2]+T[n......
  • hdu: Count(矩阵快速幂)
    ProblemDescriptionFarmerJohn有n头奶牛.某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那......
  • hdu:Queuing(矩阵快速幂)
    ProblemDescriptionQueuesandPriorityQueuesaredatastructureswhichareknowntomostcomputerscientists.TheQueueoccursofteninourdailylife.Ther......
  • hdu:Problem Description Lele now is thinking about a s(矩阵快速幂)
    ProblemDescriptionLelenowisthinkingaboutasimplefunctionf(x).Ifx<10f(x)=x.Ifx>=10f(x)=a0 f(x-1)+a1 f(x-2)+a2 f(x-3)+……+a9 ......
  • HDU 5306 Gorgeous Sequence
    \(HDU\)\(5306\)\(Gorgeous\)\(Sequence\)标签:区间最值操作,吉司机线段树,简单模板题一、题目描述现在有这样的一个问题:你有一个长度为\(n\)(\(n≤1e6\))的序列,你......
  • hdu:Ignatius and the Princess II(全排列,dfs)
    ProblemDescriptionNowourherofindsthedoortotheBEelzebubfeng5166.Heopensthedoorandfindsfeng5166isabouttokillourprettyPrincess.Butnow......
  • hdu:I Hate It(线段树单点更新)
    ProblemDescription很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。不管你喜不喜欢,现在需要你做的是,就是按照......
  • HDU-3949 XOR 题解报告
    题目地址题意:从一个序列中取任意个元素进行异或,求能异或出的所有数字中的第k小。分析:性质:一个线性基异或上另一个不同的线性基,并作为自己的新值,这并不改变整个线性......
  • hdu:张煊的金箍棒(2)(线段树)
    ProblemDescription张煊的金箍棒升级了!升级后的金箍棒是由几根相同长度的金属棒连接而成(最开始都是铜棒,从1到N编号);张煊作为金箍棒的主人,可以对金箍棒施以任意的变换,每......
  • hdu:张煊的金箍棒(3)(线段树)
    ProblemDescription张煊的金箍棒升级了!升级后的金箍棒是由N段相同长度的金属棒连接而成(最开始每段金属棒的价值都是1,从1到N编号);张煊作为金箍棒的主人,可以对金箍棒任意......