• 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;

        }

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

  • 相关阅读:
    Identity Server4学习系列三
    C# 多线程九之Timer类
    Identity Server4学习系列二之令牌(Token)的概念
    Identity Server4学习系列一
    C# 多线程八之并行Linq(ParallelEnumerable)
    使用Resourcehacker去除winrar的弹窗广告
    remote: Coding 提示: Authentication failed问题解决
    使用Python读取照片的GPS信息
    mongoose删除mongodb某个库的所有collection
    mysql数据库查询占用空间
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3041071.html
Copyright © 2020-2023  润新知