https://i.loli.net/2019/07/25/5d39b5315c60935716.jpg

2019年7月训练(肆)

P3216 [HNOI2011]数学作业

看了一眼...分段

设k为数字的位数

1--9 ->k=1

10--99 ->k=2

100--999->k=3

所以递推式为

 

 f[n]=f[n-1]*10^k+n-1(k为n的位数)
 

 所以矩阵变为:

10^k00
1 1 0
1 1 1

 

 
 

但是,矩阵会变长,怎么做呢,我们可以分开处理,初始矩阵 f[0]=>(0,0,1)

从1枚举位数,一直到length(n)−1位,一直乘10k的矩阵9∗10k−1次。

最后处理length(n)位,乘以10length(n)矩阵n−∑length(n)k=1(9∗10k−1)次。

 


 

花一个多小时写完,一交40...

调了两小时才发现定义的ull,scanf里打成了%d.................菜

所以从此打开了Dev里的最大错误警示...


 

AC码

复制代码
#include<cstdio>

#include<cstring>
#include<algorithm> 
#define ull unsigned long long
using namespace std;

ull n,m,po[25],lim[25];
struct MAT 
{
    ull a[3][3]; 
    MAT() {memset(a,0,sizeof a);}
}tran,ans;

void pre() 
{
    tran.a[0][1]=1,tran.a[0][2]=1;
    tran.a[1][0]=0,tran.a[1][1]=1,tran.a[1][2]=1;
    tran.a[2][0]=0,tran.a[2][1]=0,tran.a[2][2]=1;
    po[0]=0,po[1]=1; 
    for (int i=2; i<=19; i++) 
    {
        po[i]=po[i-1]*10;
    }
    lim[0]=1; 
    for (int i=1; i<=18; i++)
    {
        lim[i]=lim[i-1]*10;     
    } 
    lim[0]=2;
    ans.a[0][0]=1,ans.a[1][0]=1,ans.a[2][0]=1;
}

MAT mul(MAT u,MAT v) 
{
    MAT w; 
    int i,j,k;
    for (i=0;i<3;i++)
         for (j=0;j<3;j++)
             for (k=0;k<3;k++)
                 (w.a[i][j]+=u.a[i][k]*v.a[k][j])%=m;
    return w;
}

MAT pow(MAT b,ull p) 
{
    if(p==1) return b;
    MAT t=pow(b,p/2); 
    t=mul(t,t);
    return p%2==0?t:mul(t,b);
}

int main() 
{
    scanf("%lld%lld",&n,&m),pre();
    for (int i=1; i<=18; i++) 
    {
        if (lim[i-1]<=n) 
        {
               tran.a[0][0]=po[i+1]%m;
                   if (i<18&&lim[i]-1<=n) ans=mul(pow(tran,lim[i]-lim[i-1]),ans);
              else if (lim[i]>n) ans=mul(pow(tran,n-lim[i-1]+1),ans);
        }
        else break;
    }
    printf("%lld\n",ans.a[0][0]);
    return 0;
}
复制代码

2019-07-30 00:57:02

 

 

posted @   plzplz  阅读(97)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
https://i.loli.net/2019/07/25/5d39c1d4c249939054.jpg
点击右上角即可分享
微信分享提示