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

 

你可能感兴趣的:(Matrix)