zoukankan      html  css  js  c++  java
  • 矩阵够造+二分幂——hdu1588

    构造矩阵,题比较水不解释了
    View Code
    #include<stdio.h>
    #include
    <string.h>

    int mod;//矩阵中间数求模
    int n;
    int a[19];

    struct data
    {
    int map[11][11];
    };

    data matrix(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 matrixT(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
    =matrix(all,f);}

    f
    =matrix(f,f);
    p
    >>=1;
    }
    return all;
    }

    int main()
    {
    int p;
    n
    =10;
    while(scanf("%d%d",&p,&mod)!=EOF)
    {
    p
    =p-9;
    int i,j;
    data f;
    for(i=0;i<n;i++)
    {
    scanf(
    "%d",&a[i]);
    }
    for(i=0;i<n-1;i++)
    {
    for(j=0;j<n;j++)
    {
    f.map[i][j]
    =0;
    if(i+1==j)
    f.map[i][j]
    =1;
    }
    }
    for(j=0;j<n;j++)
    f.map[
    9][j]=a[n-j-1];
    data end
    =matrixT(f,p);

    int all=0;
    for(j=0;j<n;j++)
    {
    all
    +=end.map[9][j]*j%mod;
    }
    printf(
    "%d\n",all%mod);
    }
    return0;
    }

      

  • 相关阅读:
    输入流输出流打印到文件
    前缀和
    树形dp
    快速幂 ,快速幂优化,矩形快速幂(java)
    尾递归
    java中bigInteger的应用
    求树的最大直径
    买不到的数目
    ccpc 长春站 G
    大学ACM第二周心得
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2116580.html
Copyright © 2011-2022 走看看