zoukankan      html  css  js  c++  java
  • UVA12470—Tribonacci (类似斐波那契,简单题)

    题目链接:https://vjudge.net/problem/UVA-12470

    题目意思:我们都知道斐波那契数列F[i]=F[i-1]+F[i-2],现在我们要算这样的一个式子T[i]=T[i-1]+T[i-2]+T[i-3]的第n想是多少,很套路的矩阵快速幂,入门题,算是熟悉矩阵快速幂的操作吧。

    代码:

     1 //Author: xiaowuga
     2 #include<bits/stdc++.h>
     3 #define maxx INT_MAX
     4 #define minn INT_MIN
     5 #define inf 0x3f3f3f3f
     6 #define N  3
     7 using namespace std;
     8 const int MOD=1000000009;
     9 typedef long long ll;
    10 ll  n,size=3;//第n项,矩阵大小
    11 struct Matrix{
    12     ll mat[N][N];
    13     void clear(){
    14         memset(mat,0,sizeof(mat));
    15     }
    16     Matrix operator * (const Matrix & m) const{
    17         Matrix tmp;
    18         int i ,j,k;
    19         tmp.clear();
    20         for( i=0;i<size;i++)
    21             for( k=0;k<size;k++){
    22                 if(mat[i][k]==0) continue;
    23                 for( j=0;j<size;j++){
    24                     tmp.mat[i][j]+=mat[i][k]*m.mat[k][j];
    25                     tmp.mat[i][j]%=MOD;
    26                 }
    27             }
    28         return tmp;
    29     }
    30 };
    31 Matrix POW(Matrix m,ll k){
    32     Matrix ans;
    33     memset(ans.mat,0,sizeof(ans.mat));
    34     for(int i=0;i<size;i++) ans.mat[i][i]=1;
    35     while(k){
    36         if(k&1) ans=ans*m;
    37         k=k>>1;
    38         m=m*m;
    39     }
    40     return ans;
    41 }
    42 int main() {
    43     Matrix m;
    44     m.clear();
    45     m.mat[0][0]=m.mat[0][1]=m.mat[0][2]=1;
    46     m.mat[1][0]=1;m.mat[2][1]=1;
    47     ll f[3]={2,1,0};
    48     while(cin>>n&&n){
    49         if(n<=3) {cout<<n-1<<endl; continue;}
    50         Matrix ans=POW(m,n-3);
    51         ll sum=0;
    52         for(int i=0;i<3;i++){
    53            sum+=ans.mat[0][i]*f[i]%MOD;
    54            sum%=MOD; 
    55         }
    56         cout<<sum<<endl;
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    浏览器基本的工作原理
    ES6异步操作之Promise
    vux中x-input在安卓手机输入框的删除按钮(@on-click-clear-icon)点击没反应
    浏览器工作原理
    form表单的两种提交方式,submit和button的用法
    HTML DOM submit() 方法
    JavaScript test() 方法
    eval() 函数
    正则表达式
    onblur 事件
  • 原文地址:https://www.cnblogs.com/xiaowuga/p/7356524.html
Copyright © 2011-2022 走看看