poj 3233 Matrix Power Series

在写这篇文章之前,xxx已经写过了几篇关于改主题的文章,想要了解的朋友可以去翻一下之前的文章

    二分+倏地幂

    

    

    #include <iostream>

    #include <cstdio>

    #include <cstring>

    using namespace std;

    const int maxn=33;

    int n,k,mod;

    typedef struct matrix

    {

    int data[maxn][maxn],size;

    matrix(int n)

    {

        size=n;

        memset(data,0,sizeof(data));

        for(int i=1;i<=n;i++)

        data[i][i]=1;

    }

    matrix operator + (const matrix &xx) const

    {

        matrix ans(size);

        for(int i=1;i<=size;i++)

        for(int j=1;j<=size;j++)

        {

            ans.data[i][j]=data[i][j]+xx.data[i][j];

            ans.data[i][j]%=mod;

        }

        return(ans);

    }

    matrix operator * (const matrix &xx) const

    {

        matrix ans(size);

        memset(ans.data,0,sizeof(ans.data));

        for(int p=1;p<=size;p++)

        for(int q=1;q<=size;q++)

        for(int i=1;i<=size;i++)

        {

            ans.data[p][q]+=data[p][i]*xx.data[i][q];

    每日一道理
我拽着春姑娘的衣裙,春姑娘把我带到了绿色的世界里。

            ans.data[p][q]%=mod;

        }

        return(ans);

    }

    void prin()

    {

        for(int i=1;i<=size;i++)

        {

            for(int j=1;j<=size;j++)

            printf("%d ",data[i][j]);

            printf("\n");

        }

    }

    };

    matrix cal(matrix a,int k)

    {

    matrix ans(n);

    while(k)

    {

        if(k&1)

        ans=ans*a;

        k>>=1;

        a=a*a;

    }

    //    ans.prin();

    return(ans);

    }

    matrix work(matrix a,int k)

    {

    matrix ans(n),E(n);

    if(k==1)

    {

        return(a);

    }

    ans=work(a,k/2);

    ans=ans*(cal(a,k/2)+E);

    if(k&1)

    return(ans*a+a);

    else

    return(ans);

    }

    int main()

    {

    scanf("%d %d %d",&n,&k,&mod);

    matrix a(n);

    for(int i=1;i<=n;i++)

    for(int j=1;j<=n;j++)

    scanf("%d",&a.data[i][j]);

    matrix ans(n);

    ans=work(a,k);

    ans.prin();

    return 0;

    }

文章结束给大家分享下程序员的一些笑话语录: 人脑与电脑的相同点和不同点,人脑会记忆数字,电脑也会记忆数字;人脑会记忆程序,电脑也会记忆程序,但是人脑具有感知能力,这种能力电脑无法模仿,人的记忆会影响到人做任何事情,但是电脑只有程序软件。比尔还表示,人脑与电脑之间最重要的一个差别就是潜意识。对于人脑存储记忆的特别之处,比尔表示,人脑并不大,但是人脑重要的功能是联络,人脑会把同样的记忆存储在不同的地方,因此记忆读取的速度就不相同,而这种速度取决于使用的频率和知识的重要性。人脑的记忆存储能力会随着年龄增长而退化,同时记忆的质量也会随着年龄退化。经典语录网

posted @ 2013-04-24 21:29  xinyuyuanm  阅读(150)  评论(0编辑  收藏  举报