zoukankan      html  css  js  c++  java
  • 矩阵幂和(可做模板)——pku3233

    结构体里尽量不要放int64不然容易爆内存
    View Code
    #include<stdio.h>
    #include
    <string.h>

    int mod;
    int n;

    struct data
    {
    int map[30][30];
    };
    data res;

    data add(data a,data b)
    //矩阵加
    {
    data re;
    int i,j;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    re.map[i][j]
    =(a.map[i][j]+b.map[i][j])%mod;
    }
    }
    return re;
    }

    data mul(data a,data b)
    //矩阵乘
    {
    int i,j,k;
    data re;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    int all=0;
    for(k=0;k<n;k++)
    {
    all
    +=(a.map[i][k]*b.map[k][j])%mod;
    all
    %=mod;
    }
    re.map[i][j]
    =all%mod;
    }
    }
    return re;
    }

    data mi(data f,
    int p)//矩阵求幂
    {
    int i,j;
    data all;
    for(i=0;i<n;i++){
    for(j=0;j<n;j++){
    all.map[i][j]
    =0;
    if(i==j)all.map[i][j]=1;
    }
    }

    while(p>0)
    {
    if((p&1)==1)
    {all
    =mul(all,f);}

    f
    =mul(f,f);
    p
    >>=1;
    }

    return all;
    }

    data full(data a,
    int p)//矩阵A^1+A^2+A^3...A^p
    {
    data d;
    if(p==1)return a;
    elseif(p&1)
    {
    return add(full(a,p-1),mi(a,p));
    }
    else
    {
    return mul(full(a,p>>1),add(mi(a,p>>1),res));
    }
    }

    int main()
    {
    int num;
    while(scanf("%d%d%d",&n,&num,&mod)!=EOF)
    {
    int i,j;
    data f;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    scanf(
    "%d",&f.map[i][j]);
    res.map[i][j]
    =0;
    if(i==j)res.map[i][j]=1;
    }
    }

    data temp
    =full(f,num);
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    if(j>0)printf("");
    printf(
    "%d",temp.map[i][j]%mod);
    }
    printf(
    "\n");
    }

    }
    return0;
    }

      

  • 相关阅读:
    shutdown -s -t
    企业计算模式
    数组的合并
    Cytoscape基础教程笔记
    初识Uniprot API
    常用生物信息 ID 及转换方法
    Gene Ontology (GO) 注释
    KEGG注释
    Install packages failed: Installing packages: error occurred. ------简单的问题常常会被忽略
    Cytoscape,Gephi ,mitlab network的比较
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2116414.html
Copyright © 2011-2022 走看看