zoukankan      html  css  js  c++  java
  • 【bzoj 2326】【HNOI 2011】数学作业

    题解:

      矩阵裸体。

      

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 typedef long long ll;
     5 ll n,mod;
     6 struct Matrix{
     7     ll a[4][4];
     8     Matrix (){
     9         memset(a,0,sizeof(a));
    10     }
    11     inline void e(){
    12         for(int i=1;i<=3;i++)
    13             a[i][i]=1;
    14     }
    15     friend Matrix operator *(Matrix x,Matrix y){
    16         Matrix c;
    17         for(int k=1;k<=3;k++)
    18             for(int i=1;i<=3;i++)
    19                 for(int j=1;j<=3;j++){
    20                     c.a[i][j]+=x.a[i][k]*y.a[k][j];
    21                     if(c.a[i][j]>mod)
    22                         c.a[i][j]%=mod;
    23                 }
    24         return c;
    25     }
    26     friend Matrix operator ^(Matrix a,ll b){
    27         Matrix ans;ans.e();
    28         while(b){
    29             if(b&1) ans=ans*a;
    30             b>>=1;
    31             a=a*a;
    32         }return ans;
    33     }
    34     inline void kmod(ll k){
    35         for(int i=1;i<=3;i++)
    36             for(int j=i;j<=3;j++)
    37                 a[i][j]=1;
    38         a[1][1]=k%mod;
    39     }
    40 };
    41 int main(){
    42     scanf("%lld%lld",&n,&mod);
    43     Matrix ans;
    44     ans.a[1][1]=0;
    45     ans.a[2][1]=0;
    46     ans.a[3][1]=1;
    47     int i;ll j;
    48     for(i=1,j=1;j*10<=n;j*=10,i++){
    49         Matrix b;b.kmod(j*10);
    50         ans=(b^(j*10-j))*ans;
    51     }//printf("%lld
    ",ans.a[1][1]);
    52     Matrix b;b.kmod(j*10);
    53     if(n-j+1>0)
    54         ans=(b^(n-j+1))*ans;
    55     printf("%lld
    ",ans.a[1][1]);
    56 }
  • 相关阅读:
    js日期 操作
    c# 调用c++ dll
    多维数组与交错数组的转换
    c++多态
    c++ 指向类成员函数的函数指针
    c++虚析构函数的使用及其注意点
    c++模板实现 linq
    Php 常用类
    Php ORM 对象关系映射
    Php OpenID
  • 原文地址:https://www.cnblogs.com/Troywar/p/7400528.html
Copyright © 2011-2022 走看看