首页 > 其他分享 >tzoj7929: Matrix Power Series

tzoj7929: Matrix Power Series

时间:2023-08-15 17:56:21浏览次数:55  
标签:return Matrix int Series res add ans tzoj7929 matrix

 

题意

给定一个n*n大小的矩阵A,求以A为公比的等比数列的前k项和。

解题思路

直接从1到k矩阵快速幂每项相加肯定是会超时的,而如果用公式计算需要求逆矩阵非常麻烦,而且有可能会溢出。

因此我们使用分治求解。

当n为奇数时,

 当n为偶数时,

 分治求解即可。

#include <bits/stdc++.h>
using namespace std;

struct matrix
{
    int a[31][31];
};

int n, k, m;
matrix st, base;
matrix add(matrix a, matrix b)
{
    matrix res;
    for (int i = 1; i <= n;i++)
        for (int j = 1; j <= n;j++)
            res.a[i][j] = (a.a[i][j] + b.a[i][j]) % m;
    return res;
}
matrix multi(matrix a, matrix b)
{
    matrix res;
    memset(res.a, 0, sizeof(res.a));
    for (int i = 1;i<=n;i++)
        for (int j = 1; j <= n;j++)
            for (int p = 1; p <= n;p++)
                res.a[i][j] = (res.a[i][j] + a.a[i][p] * b.a[p][j]) % m;
    return res;
}
matrix fastpow(int p)
{
    matrix a = st;
    matrix b = base;
    while(p)
    {
        if(p&1)
            b = multi(b, a);
        a = multi(a, a);
        p = p >> 1;
    }
    return b;
}
matrix dfs(int p)
{
    if(p==1)
        return st;
    matrix ans, temp;
    ans = dfs(p / 2);
    temp = fastpow(p / 2);
    ans = add(ans, multi(ans, temp));
    if(p&1)
        ans = add(ans, fastpow(p));
    return ans;
}
signed main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k >> m;
    for (int i = 1; i <= n;i++)
        for (int j = 1; j <= n;j++)
        {
            cin >> st.a[i][j];
            if(i==j)
                base.a[i][j] = 1;
            else
                base.a[i][j] = 0;
        }
    matrix res;
    res = dfs(k);
    for (int i = 1;i<=n;i++)
    {
        for (int j = 1; j <= n;j++)
        {
            if(j!=1)
                cout<<" ";
            cout << res.a[i][j];
        }
        cout << endl;
    }
        return 0;
}

 

标签:return,Matrix,int,Series,res,add,ans,tzoj7929,matrix
From: https://www.cnblogs.com/yosuganosora/p/17632014.html

相关文章

  • Vulnhub 靶场 MATRIX-BREAKOUT: 2 MORPHEUS
    前期准备:靶机地址:https://www.vulnhub.com/entry/matrix-breakout-2-morpheus,757/kali攻击机ip:192.168.11.11靶机ip:192.168.11.12一、信息收集及利用1.使用nmap对目标靶机进行扫描发现开放了22、80、81端口。2.80端口访问80端口:查看页面信息没发现什么重要信息,......
  • D :Big Matrix
    湖南省第十八届大学生计算机程序设计竞赛(HNCPC2022)D题原题链接:https://cpc.csgrandeur.cn/csgoj/problemset/problem?pid=1192关于这题其实是一道数学题,如果直接暴力三重循环肯定爆T,所以细心一点的就会发现,其实有规律首先题目意思如下规律如下,自己可以尝试一下列举后面的A(i,j......
  • 如何用Confusion matrix,classification report,ROC curve (AUC)分析一个二分类问题
    ROChttps://zhuanlan.zhihu.com/p/246444894   Sure,let'screatearandomconfusionmatrixasanexample,andthenI'llexplainwhateachelementinthematrixmeans:Supposewehaveabinaryclassificationproblem,wherethetruelabelsareas......
  • doubly block toeplitz matrix 在加速矩阵差卷积上的应用
    文档链接CNN的卷积是执行了\(w'_{i,j}=\sum\limits_{x,y}w_{i+x,j+y}\timesC_{x,y}\),有人认为每次平移卷积核,运算量很大,又是乘法又是加法。现在我们吧\(w_{x,y}\)展开形成一个\([n\timesm,1]\)的向量\(V\),然后构造一个大小为\([(n+1)\times(m+1),n\timesm]\)矩阵......
  • Pandas学习笔记之Series
    一、Series基本概念及创建1.基本概念#Series数据结构#Series是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引#导入numpy、pandas模块importnumpyasnpimportpandasaspds=pd.Series(np.random.rand(5))print(s)#......
  • Matrix-writeup
    matrix信息收集只开放了80端口换了一个大一点的字典扫到了一个PHP页面此页面会将输入的内容显示在页面上,抓包之后可以看到他写入到了一个txt文件中那就可以把一句话写入到一个文件里再去连接连上哥斯拉在当前目录下找到一个flag,他提示要找密码以及一张图片找到这个......
  • 【模板】图的计数相关:行列式及求值、Matrix-Tree 定理、BEST 定理、LGV 引理
    归类为线性代数、图论。证明都是神仙,特别是名字带“理”的,不证了。行列式定义行列式(Determinant)是对\(n\)阶方阵\(A\)定义的,是一个标量。\(A\)的\(n\)阶行列式\(det(A)\)或\(|A|\)定义如下:\[det(A)=\sum_p(-1)^{\mu(p)}\prod_{i}A[i][p_i].\]这里将排列的逆序对数......
  • 题解 POJ3318【Matrix Multiplication】
    postedon2022-10-2119:56:08|under题解|sourceproblem判断三个\(n\timesn\)的矩阵是否满足\(A\timesB=C\),\(n\leq500\)。solution随机一个行向量\(v\)。若\(a\timesb=c\),则有\(v\timesa\timesb=v\timesc\)(不充分)。显然相乘复杂度仅为\(O(n^2)\)。类似于......
  • LeetCode 519. Random Flip Matrix 哈希Map
    Thereisanmxnbinarygridmatrixwithallthevaluesset0initially.Designanalgorithmtorandomlypickanindex(i,j)wherematrix[i][j]==0andflipsitto1.Alltheindices(i,j)wherematrix[i][j]==0shouldbeequallylikelytobereturne......
  • 时间序列转图像:相对位置矩阵(Relative Position Matrix)-Python版复现
    时间序列分类(TSC)在时间序列数据挖掘任务中备受关注,已经应用到各个领域。随着卷积神经网络(ConvolutionalNeuralNetwork,CNN)的迅速发展,基于卷积神经网络的TSC方法直到最近才开始出现。因此,提出了一个新的深度学习框架,使用相对位置矩阵(RelativePositionMatrix,RPM)和卷积神经......