zoukankan      html  css  js  c++  java
  • 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;

        }

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

  • 相关阅读:
    SQL Server: TRUSTWORTHY数据库属性
    查看SQL Server的版本
    SQL学习笔记7
    SQL Server Database:ReadOnly
    Shell编程(五)find与grep命令简介及正则表达式
    windowXP 任务计划无法启动 错误代码:0X80041315
    ORA14400: inserted partition key does not map to any partition
    Windows 批处理实现 定时打开IE 延时一段时间后 关闭IE
    尝试创建自定义事件日志时,将会收到“Requested registry access is not allowed(不允许所请求的注册表访问权)”错误消息
    Linux的用户和组群管理
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3041071.html
Copyright © 2011-2022 走看看