zoukankan      html  css  js  c++  java
  • HDU

    矩阵快速幂搞一下。。f(x) = 2*f(x-1)+1,x为奇数,反之f(x) = 2f(x-1)。考虑到n比较大,因此想到矩阵快速幂优化,可构造如下矩阵,顺便测下latex能不能用。。

     凑合看吧,我实在不想改了。。矩阵显示不出来,如果你不会latex,自己去学咯。

    $$

    ordermatrix{&f_{x}&f_{x-1}&g_{x}cr

      f_{x-1}  &  3  &    1   &   0  cr  

      f_{x-2}  &  -2 &    0    &  0  cr

      g_{x-1} &  1   &   0    &   -1 cr}

    $$

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<string>
    #include<set>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<list>
    #include<cstring>
    #include<map>
    #include<stack>
    #include<bitset>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define maxn 3005
    #define maxm 100005
    #define ull unsigned long long
    #define ll long long
    #define hashmod 99999839
    ll n,m;
    struct matrix{
        ll a[3][3];
        matrix(){
            memset(a,0,sizeof(a));
        }
        void unit(){
            a[0][0] = a[1][1] = a[2][2] = 1;
        }
        void init(){
            a[0][0] = 3,a[0][1] = 1,a[1][0] = -2,a[2][0] = 1,a[2][2] = -1;
        }
        matrix operator* (const matrix& p){
            matrix ans;
            for(int i = 0;i < 3;++i){
                for(int j = 0;j < 3;++j){
                    for(int k = 0;k < 3;++k){
                        ans.a[i][j] = ans.a[i][j] + a[i][k] * p.a[k][j];
                        if(ans.a[i][j] < 0) ans.a[i][j] += m;
                        if(ans.a[i][j] >= m) ans.a[i][j] %= m;
                    }
                }
            }
            return ans;
        }
    };
    void solve(ll n){
        matrix ans,p;
        ans.unit(),p.init();
        while(n){
            if(n & 1) ans = ans * p;
            p = p * p;
            n >>= 1;
        }
        ll s = ans.a[0][0] - ans.a[2][0];
        if(s < 0) s += m;
        if(s >= m) s %= m;
        printf("%lld
    ",s);
    }
    int main(){
        freopen("a.in","r",stdin);
        freopen("b.out","w",stdout);
        while(~scanf("%lld%lld",&n,&m)){
            solve(n-1);
        }
        return 0;
    }
  • 相关阅读:
    进程虚拟内存
    非连续内存区缺页异常处理
    请求调页和写时复制
    标签对齐(补充)
    shell数学表达式
    缺页异常的处理
    不错的书籍
    imag database2
    image database
    Apache down了?
  • 原文地址:https://www.cnblogs.com/zhuiyicc/p/9528174.html
Copyright © 2011-2022 走看看