zoukankan      html  css  js  c++  java
  • Blocks POJ

    题目大意:

    给定N个方块排成一列。先用红、蓝、绿、黄四种颜色涂方块,问红色方块跟绿色方块同为偶数的方案有多少个
    

     分析:

        设涂到第i个方块时,红绿都是偶数的方案数为ai,两者中只有一者为偶数bi,两者都是奇数的方案ci,可以得
    到下列递推:
    (先说a[i+1]的递推):
    1.到i都为偶数,i+1个都涂另外两种颜色中的一个(所以就是a[i]×2)
    2.到i只有一个为奇数,i+1涂成奇数的那个(所以时b[i])
    综上所述:a[i+1]=b[i]+a[i]×2
    同理b[i+1]=2×a[i]+2×b[i]+2×c[i]
         c[i+1]=b[i]+2×c[i]
    /*
    a[i] 	|2 1 0|^n  a[0](1)
    b[i]  = |2 2 2|     b[0](0)
    c[i]	|0 1 2|      c[0](0)
    */ 
    

     code:

    #define debug
    #include<stdio.h>
    #include<math.h>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<string>
    #include<cstring>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    #include<functional>
    #include<iomanip>
    #include<map>
    #include<set>
    #define pb push_back
    #define dbg(x) cout<<#x<<" = "<<(x)<<endl;
    #define lson l,m,rt<<1
    #define cmm(x) cout<<"("<<(x)<<")";
    #define rson m+1,r,rt<<1|1
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll>PLL;
    typedef pair<int,ll>Pil;
    typedef pair<ll,int>Pli;
    const ll INF = 0x3f3f3f3f;
    const ll inf=0x7fffffff;
    const double eps=1e-8;
    const int maxn =1000000;
    const int N = 510;
    const ll mod=1e9+7;
    const ll MOD=10007;
    //------
    //define
    typedef vector<int> vec;
    typedef vector<vec> mat;
    
    mat mul(mat &A,mat&B){
    	mat C(A.size(),vec(B[0].size()));
    	for(int i=0;i<A.size();i++){
    		for(int k=0;k<B.size();k++){
    			for(int j=0;j<B[0].size();j++){
    				C[i][j]=(C[i][j]+A[i][k]*B[k][j])%MOD;
    			}
    		}
    	}
    	return C;
    }
    mat pow(mat A,ll n){
    	mat B(A.size(),vec(A.size()));
    	//单位阵 I 
    	for(int i=0;i<A.size();i++){
    		B[i][i]=1;
    	}
    	while(n>0){
    		if(n&1)B=mul(B,A);
    		A=mul(A,A);
    		n>>=1;
    	}
    	return B;
    }
    //solve
    void solve() {
    	int T;
    	cin>>T;
    	while(T--){
    		int N;
    		cin>>N;
    		mat A(3,vec(3));
    		A[0][0]=2;A[0][1]=1;A[0][2]=0;
    		A[1][0]=2;A[1][1]=2;A[1][2]=2;
    		A[2][0]=0;A[2][1]=1;A[2][2]=2;
    		A=pow(A,N);
    		cout<<A[0][0]<<endl;
    	}
    }
    int main() {
    	ios_base::sync_with_stdio(false);
    #ifdef debug
    	freopen("in.txt", "r", stdin);
    //	freopen("out.txt","w",stdout);
    #endif
    	cin.tie(0);
    	cout.tie(0);
    	solve();
    	/*
    		#ifdef debug
    			fclose(stdin);
    			fclose(stdout);
    			system("out.txt");
    		#endif
    	*/
    	return 0;
    }
    
  • 相关阅读:
    LNMP 部署
    zabbix3.2安装graphtree3.0.4
    升级java8---from centos
    mysql5.6-5.7性能调优
    samba server install
    centos7 zabbix3 install done
    实验四总结
    第五周学习小结
    个人的一些html、css笔记
    为什么wait,notify,notifyAll定义在Object中?
  • 原文地址:https://www.cnblogs.com/visualVK/p/9119331.html
Copyright © 2011-2022 走看看