zoukankan      html  css  js  c++  java
  • HDU 6198(2017 ACM/ICPC Asia Regional Shenyang Online)

    思路:找规律发现这个数是斐波那契第2*k+3项-1,数据较大矩阵快速幂搞定.
     
    快速幂入门第一题QAQ
    #include <stdio.h>
    #include <stdlib.h>
    #include <cmath>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <string>
    #include <ctype.h>
    //******************************************************
    #define lrt (rt*2)
    #define rrt  (rt*2+1)
    #define LL long long
    #define inf 0x3f3f3f3f
    #define pi acos(-1.0)
    #define exp 1e-8
    //***************************************************
    #define eps             1e-8
    #define inf             0x3f3f3f3f
    #define INF             2e18
    #define LL              long long
    #define ULL             unsigned long long
    #define PI              acos(-1.0)
    #define pb              push_back
    #define mk              make_pair
    
    #define all(a)          a.begin(),a.end()
    #define rall(a)         a.rbegin(),a.rend()
    #define SQR(a)          ((a)*(a))
    #define Unique(a)       sort(all(a)),a.erase(unique(all(a)),a.end())
    #define min3(a,b,c)     min(a,min(b,c))
    #define max3(a,b,c)     max(a,max(b,c))
    #define min4(a,b,c,d)   min(min(a,b),min(c,d))
    #define max4(a,b,c,d)   max(max(a,b),max(c,d))
    #define max5(a,b,c,d,e) max(max3(a,b,c),max(d,e))
    #define min5(a,b,c,d,e) min(min3(a,b,c),min(d,e))
    #define Iterator(a)     __typeof__(a.begin())
    #define rIterator(a)    __typeof__(a.rbegin())
    //#define FastRead      ios_base::sync_with_stdio(0);cin.tie(0)
    #define FastRead        ios::sync_with_stdio(false);
    #define CasePrint       pc('C'); pc('a'); pc('s'); pc('e'); pc(' '); write(qq++,false); pc(':'); pc(' ')
    #define vi              vector <int>
    #define vL              vector <LL>
    #define For(I,A,B)      for(int I = (A); I < (B); ++I)
    #define FOR(I,A,B)      for(int I = (A); I <= (B); ++I)
    #define rFor(I,A,B)     for(int I = (A); I >= (B); --I)
    #define Rep(I,N)        For(I,0,N)
    #define REP(I,N)        FOR(I,1,N)
    using namespace std;
    const int maxn=1e5+10;
    #define mod 998244353
    
    
    struct Matirx {
        int h,w;
        LL a[5][5];
    }ori,res,it;
    LL f[5]={0,1,1};
    void iint(){
        it.w=2;it.h=1;it.a[1][1]=1;it.a[1][2]=0;
        res.w=res.h=2;
        memset(res.a,0,sizeof(res.a));
        res.a[1][1]=res.a[2][2]=1;
        ori.w=ori.h=2;
        memset(ori.a,0,sizeof(ori.a));
        ori.a[1][1]= 1;ori.a[1][2]= 1;
        ori.a[2][1]= 1;ori.a[2][2]= 0;
    }
    Matirx multy(Matirx x,Matirx y){
        Matirx z;z.w=y.w;z.h=x.h;
        memset(z.a,0,sizeof(z.a));
        for(int i=1;i<=x.h;i++){
            for(int k=1;k<=x.w;k++){
                if(x.a[i][k]==0) continue;
                for(int j=1;j<=y.w;j++)
                    z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;
            }
        }
        return z;
    }
    
    LL Matirx_mod(LL n){
        if(n<2) return f[n];
        else n-=1;
        while(n){
            if(n&1) res=multy(ori,res);
            ori=multy(ori,ori);
            n>>=1;
        }
        res=multy(it,res);
        return res.a[1][1]%mod;
    }
    
    int main()
    {
        LL n;
        while(scanf("%I64d",&n)!=EOF)
        {
            iint();
            printf("%I64d
    ",Matirx_mod(2*n+3)-1);
        }
        return 0;
    }
    
  • 相关阅读:
    数据库基础——EXISTS和IN
    C#基础——加密
    C#基础——派生和继承
    SQL Server——报表服务
    SQL Server——SQL Server Profiler
    UML基础——UML简介和历史
    C#基础——密码加密
    C#(ASP.NET)错误: 无法获取属性“0”的值: 对象为 null 或未定义 关键字 'user' 附近有语法错误。
    SQL Server——存储过程
    链表的声明及操作
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/7512239.html
Copyright © 2011-2022 走看看