zoukankan      html  css  js  c++  java
  • Reading comprehension HDU

    题目链接

    题意:求出代码中的值。

    思路:两种:第一种打表发现fi=fi-1+2*fi-2+1

    第二种:

    //a[n] = a[n-1] + n%2
    //a[n] = a[n-1] + (n+1)/2 - n/2

    #include <bits/stdc++.h>
    #include<unordered_map>
    using namespace std;
    #define ll long long
    const int maxn=20;
    int mod=1e9+7;
    struct Marix{//矩阵
        int mo[maxn][maxn],n;
        Marix(){}
        Marix(int _n){
            n=_n;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++) mo[i][j]=0;
            }
        }
    };
    Marix mul(Marix a,Marix b){//矩阵乘法
        Marix res=Marix(a.n);
        for(int i=0;i<a.n;i++){
            for(int j=0;j<a.n;j++){
                for(int k=0;k<a.n;k++){
                    int tmp=(long long )a.mo[i][k]*b.mo[k][j]%mod;
                    res.mo[i][j]=(res.mo[i][j]+tmp)%mod;
                }
            }
        }
        return res;
    }
    Marix powMod(Marix a,int n){//矩阵快速幂
        Marix nul;
        nul=Marix(a.n);
        for(int i=0;i<nul.n;i++){
            nul.mo[i][i]=1;
        }
        while(n){
            if(n&1) nul=mul(nul,a);
            a=mul(a,a);
            n>>=1;
        }
        return nul;
    }
    
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&mod))
        {
            Marix t1=Marix(3);
            t1.mo[0][0]=1;
            t1.mo[0][1]=0;
            t1.mo[0][2]=1;
            Marix t=Marix(3);
            t.mo[0][0]=1;
            t.mo[1][0]=2;
            t.mo[2][0]=1;
            t.mo[0][1]=1;
            t.mo[2][2]=1;
            Marix ans1=powMod(t,n-1);
            Marix ans=mul(t1,ans1);
            printf("%d
    ",ans.mo[0][0]);
        }
        
    }
  • 相关阅读:
    C博客作业--指针
    AI与PS
    Swagger介绍
    仪表板的应用
    弹窗使用
    产品经理
    原型设计
    关于标签的使用意义
    微服务架构
    hive建表导入数据
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/13746479.html
Copyright © 2011-2022 走看看