zoukankan      html  css  js  c++  java
  • hihocoder #1143 : 骨牌覆盖问题·一

    http://hihocoder.com/problemset/problem/1143 
    
    斐波那契数列,快速矩阵幂解法
    
    #include <cstdio>
    #include <cstring>
    #include <vector>
    
    using namespace std;
    const int N = 19999997;
    
    void copy(long long a[2][2],long long b[2][2])
    {
        for(int i = 0; i < 2; i++)
            for(int j = 0; j < 2; j++)
                a[i][j] = b[i][j];
    
    }
    
    void calc(long long a[2][2],long long b[2][2])
    {
        long long c[2][2]={0};
        c[0][0] = (a[0][0]*b[0][0]+a[0][1]*b[1][0])%N;
        c[0][1] = (a[0][0]*b[0][1]+a[0][1]*b[1][1])%N;
        c[1][0] = (a[1][0]*b[0][0]+a[1][1]*b[1][0])%N;
        c[1][1] = (a[1][0]*b[0][1]+a[1][1]*b[1][1])%N;
        copy(a,c);
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            long long c[2][2]={0,1,1,1};
            long long res[2] = {1,1};
            int flag = 0;
            for(int k = 0; (1<<k) <= n;k++)
            {
                if(n & (1<<k))
                {
                    long long u = (res[0]*c[0][0]+res[1]*c[0][1])%N;
                    long long v = (res[0]*c[1][0]+res[1]*c[1][1])%N;
                    res[0] = u;
                    res[1] = v;
                }
                calc(c,c);
            }
            printf("%lld
    ",res[0]);
        }
        return 0;
    }
    
     
  • 相关阅读:
    维度穿梭
    演绎与抽象
    幻想的功能
    深层探宝
    内存游戏
    函数内功
    共享与私有的变量
    参数的格式
    功能模拟与功能实现
    【Oracle】基础知识查漏补缺
  • 原文地址:https://www.cnblogs.com/zendu/p/4981011.html
Copyright © 2011-2022 走看看