zoukankan      html  css  js  c++  java
  • POJ 3233 Matrix Power Series(二分等比求和)

    Matrix Power Series

    【题目链接】Matrix Power Series

    【题目类型】二分等比求和

    &题解:

    这题我原来用vector写的,总是超时,不知道为什么,之后就改用数组了,照着别人的代码敲了一遍

    【时间复杂度】O(logn)

    &代码:

    #include <cstdio>
    #include <bitset>
    #include <iostream>
    #include <set>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <vector>
    using namespace std;
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N= 30 +9;
    
    struct Matrix
    {
    	int m[N][N];
    };
    Matrix I;
    int n,k,M;
    
    Matrix add(Matrix a,Matrix b)
    {
    	Matrix c;
    	for(int i=0;i<n;i++)
    		for(int j=0;j<n;j++)
    			c.m[i][j]=(a.m[i][j]+b.m[i][j])%M;
    	return c;
    }
    
    Matrix multi(Matrix a,Matrix b)
    {
    	Matrix c;
    	for(int i=0;i<n;i++){
    		for(int j=0;j<n;j++){
    			c.m[i][j]=0;
    			for(int k=0;k<n;k++)
    				c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%M;
    		}
    	}
    	return c;
    }
    Matrix power(Matrix A,ll n)
    {
    	Matrix ans=I;
    	while(n){
    		if(n&1)
    			ans=multi(ans,A);
    		A=multi(A,A);
    		n>>=1;
    	}
    	return ans;
    }
    
    Matrix sum(Matrix A,ll k)
    {
    	if(k==1) return A;
    	Matrix t=sum(A,k/2);
    	Matrix cur=power(A,k/2+(k&1));
    	t=add(t,multi(t,cur));
    	if(k&1) t=add(t,cur);
    	return t;
    }
    
    int main()
    {
    	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    //	freopen("E:1.txt","r",stdin);
    	while(cin>>n>>k>>M){
    		Matrix A;
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++){
    				cin>>A.m[i][j];
    				A.m[i][j]%=M;
    			}
    			I.m[i][i]=1;
    		}
    		Matrix ans=sum(A,k);
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++)
    				cout<<ans.m[i][j]<<" ";
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    允许debian wheezy支持IOS7+的iphone.
    openSUSE 国内镜像摘要
    策略模式总结
    顺序串
    WindowState注意事项
    NLP | 自然语言处理
    Using Autorelease Pool Blocks
    NSAutoreleasePool & thread
    oc语言特性
    oc语言基础整理
  • 原文地址:https://www.cnblogs.com/s1124yy/p/6652690.html
Copyright © 2011-2022 走看看