zoukankan      html  css  js  c++  java
  • HDU2842—Chinese Rings

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842

    题目意思:一把一个n连环的前n个拿下来,一个个n连环,要把第k个拿下来,需要把前n-2个拿下来,并留下第n-1个环,然后花一步把第n个拿下来,然后为了把第n-1个环拿下来,我们又需要把前n-2个放回去(逆过程),从而把这个问题转化成把前n-1个环拿下来。

    思路:根据上面的分析,我们很容易的可以写出递推式子,f[n]=2*f[n-2]+f[n-1]+1,一个带常数项的矩阵快速幂,题目意思有点难懂,忽略了,要把前n-2个放回去,还是逆过程,一直没有搞得特别懂,感觉有点没道理。

    代码:

    //Author: xiaowuga
    #include <bits/stdc++.h>
    #define maxx INT_MAX
    #define minn INT_MIN
    #define inf 0x3f3f3f3f
    #define n 3
    #define MOD 200907
    using namespace std;
    typedef long long ll;
    struct Matrix{
        ll mat[3][3];
        Matrix operator * (const Matrix & m) const{
            Matrix tmp;
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++){
                    tmp.mat[i][j]=0;
                    for(int k=0;k<n;k++){
                        tmp.mat[i][j]+=mat[i][k]*m.mat[k][j]%MOD;
                        tmp.mat[i][j]%=MOD;
                    }
                }
            return tmp;
        }
    };
    Matrix POW(Matrix m,ll k){
        Matrix ans;
        memset(ans.mat,0,sizeof(ans.mat));
        for(int i=0;i<n;i++) ans.mat[i][i]=1;
        while(k){
            if(k&1) ans=ans*m;
            k/=2;
            m=m*m;
        }
        return ans;
    }
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
        ll num;
        while(cin>>num&&num){
            Matrix m;
            memset(m.mat,0,sizeof(m.mat));
            m.mat[0][0]= m.mat[0][2]= m.mat[1][0]= m.mat[2][2]=1;
            m.mat[0][1]=2;
            ll f[3]={2,1,1};
            Matrix ans;
            if(num<=2) cout<<(num==2?2:1)<<endl;
            else{
                ans=POW(m,num-2);
                ll sum=0;
                for(int i=0;i<n;i++){
                    sum+=ans.mat[0][i]*f[i]%MOD;
                }
                cout<<sum%MOD<<endl;
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/xiaowuga/p/7352220.html
Copyright © 2011-2022 走看看