博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HNOI2011] 数学作业
阅读量:4979 次
发布时间:2019-06-12

本文共 1413 字,大约阅读时间需要 4 分钟。

 

转载请注明出处:

 

[HNOI2011] 数学作业

时间限制:1 s   内存限制:128 MB

【题目描述】

solution:

    用矩阵乘。

    在向后插入数时,相当于把原答案乘10的多少次方再加上这个数,所以我们可以导成矩阵。

    

        a矩阵                                  b矩阵

       

         ans                            10^j     1      0

  

          i                               0      1      1

          1                               0      0      1

    b矩阵第一行是把ans*10^j+i,第二行是让i加1,第三行是保持a[3]=1.

    由于10^j的j不同,所以我们应分层去求。

    然后我们就可以开心地矩阵快速幂了。

    注意时刻取模。

附上代码:

 

#include
#include
#include
#include
#include
#include
using namespace std;long long ans,a[10],b[10][10],n,mod;void ksc(long long);void hucheng();void zicheng();int main(){ scanf("%lld%lld",&n,&mod); long long x=10,y=10,z=9; a[2]=1; a[3]=1; while(x<=n) { memset(b,0,sizeof(b)); b[1][1]=y; b[1][2]=b[2][2]=b[2][3]=b[3][3]=1; ksc(z); ans=a[1]; x*=10; y*=10; y%=mod; z*=10; } memset(b,0,sizeof(b)); b[1][1]=y; b[1][2]=b[2][2]=b[2][3]=b[3][3]=1; ksc(n-x/10+1); printf("%lld",a[1]); return 0;}void ksc(long long x){ while(x) { if((x&1)==1) hucheng(); x=x>>1; zicheng(); }}void hucheng(){ long long c[7]; memset(c,0,sizeof(c)); for(long long i=1;i<=3;i++) for(long long j=1;j<=3;j++) { c[i]+=a[j]*b[i][j]; c[i]%=mod; } for(long long i=1;i<=3;i++) a[i]=c[i];}void zicheng(){ long long c[7][7]; memset(c,0,sizeof(c)); for(long long i=1;i<=3;i++) for(long long j=1;j<=3;j++) for(long long k=1;k<=3;k++) { c[i][j]+=b[i][k]*b[k][j]; c[i][j]%=mod; } for(long long i=1;i<=3;i++) for(long long j=1;j<=3;j++) b[i][j]=c[i][j];}

转载于:https://www.cnblogs.com/hzoi-wangxh/p/7738627.html

你可能感兴趣的文章
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
centos iptables
查看>>
寻找二叉查找树中比指定值小的所有节点中最大的那个节点
查看>>
如何设置输入框达到只读效果
查看>>
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>