POJ 3233 Matrix Power Series(矩阵等比求和)

题目链接

模板题。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int p[101][101],mat[101][101];
int t;
void qmod(int n,int MOD)
{
    int c[101][101],i,j,k;
    while(n)
    {
        memset(c,0,sizeof(c));
        if(n&1)
        {
            memset(c,0,sizeof(c));
            for(i = 0;i < t;i ++)
            {
                for(j = 0;j < t;j ++)
                {
                    for(k = 0;k < t;k ++)
                    {
                        c[i][j] += mat[i][k] * p[k][j];
                        c[i][j] %= MOD;
                    }
                }
            }
            memcpy(mat,c,sizeof(mat));
        }
        memset(c,0,sizeof(c));
        for(i = 0;i < t;i ++)
        {
            for(j = 0;j < t;j ++)
            {
                for(k = 0;k < t;k ++)
                {
                    c[i][j] += p[i][k] * p[k][j];
                    c[i][j] %= MOD;
                }
            }
        }
        memcpy(p,c,sizeof(p));
        n >>= 1;
    }
}
int main()
{
    int n,m,k,i,j;
    while(scanf("%d%d%d",&n,&k,&m)!=EOF)
    {
        for(i = 0;i < n;i ++)
        {
            for(j = 0;j < n;j ++)
            scanf("%d",&p[i][j]);
        }
        for(i = 0;i < n;i ++)
        {
            p[i][i+n] = p[i+n][i+n] = 1;
        }
        n <<= 1;
        for(i = 0;i < n;i ++)
        {
            for(j = 0;j < n;j ++)
            mat[i][j] = (i == j);
        }
        t = n;
        qmod(k+1,m);
        n >>= 1;
        for(i = 0;i < n;i ++)
        {
            mat[i][i+n] --;
            if(mat[i][i+n] < 0)
            mat[i][i+n] += m;
        }
        for(i = 0;i < n;i ++)
        {
            for(j = 0;j < n;j ++)
            {
                if(j == n-1)
                printf("%d\n",mat[i][j+n]);
                else
                printf("%d ",mat[i][j+n]);
            }
        }
    }
    return 0;
}
View Code

 

posted @ 2014-05-07 09:49  Naix_x  阅读(211)  评论(0编辑  收藏  举报