• hdu 2855 Fibonacci Check-up (矩阵)


    题目链接:hdu 2855 Fibonacci Check-up

    题意&题解:

     1 #include<bits/stdc++.h>
     2 #define mst(a,b) memset(a,b,sizeof(a))
     3 #define F(i,a,b) for(int i=a;i<=b;i++)
     4 using namespace std;
     5 typedef long long ll;
     6 
     7 const int mat_N=2;
     8 int mo;
     9 struct mat{
    10     int c[mat_N][mat_N];
    11     void init(){mst(c,0);}
    12     mat operator*(mat b){
    13         mat M;int N=mat_N-1;M.init();
    14         F(i,0,N)F(j,0,N)if(c[i][j])F(k,0,N)M.c[i][k]=(M.c[i][k]+c[i][j]*b.c[j][k])%mo;
    15         return M;
    16     }
    17     mat operator^(ll k){
    18         mat ans,M=(*this);int N=mat_N-1;ans.init();
    19         F(i,0,N)ans.c[i][i]=1;
    20         while(k){if(k&1)ans=ans*M;k>>=1,M=M*M;}
    21         return ans;
    22     }
    23 }A,B;
    24 
    25 int main()
    26 {
    27     A=(mat){1,1,1,0};
    28     int t,k;
    29     scanf("%d",&t);
    30     while(t--)
    31     {
    32         scanf("%d%d",&k,&mo);
    33         if(k==0){puts("0");continue;}
    34         B=A^(2*k-1);
    35         printf("%d
    ",B.c[0][0]);
    36     }
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    enum
    高可用复用类
    int 和 Integer 的区别
    MysqlMd5加密
    软件测试例子
    Wordcount
    大气登录页面
    生成二维码的JAVA
    多态的理解
    打印低头思故乡 java
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6421276.html
Copyright © 2020-2023  润新知